import com.sun.image.codec.jpeg.*;
import java.awt.*;
import java.awt.image.*;
import javax.swing.*;
import java.io.*;
import java.util.*;

public class GIFtoJPEG {

    public static void main(String[] args) {
	double quality = 0.5;
	double angle = 0;
	Vector argvec = new Vector();
	for (int i=0; i<args.length; i++) {
	    if ((args[i].equals("-q"))||args[i].equals("--quality")) {
		i++;
		if (i < args.length)
		    quality = Double.valueOf(args[i]).doubleValue()/100;
	    } else if (args[i].equals("-r")||args[i].equals("--rotate")) {
		i++;
		if (i < args.length)
		    angle = Double.valueOf(args[i]).doubleValue()*Math.PI/180;
	    } else
		argvec.add(args[i]);
	}
	if (argvec.size() == 2) 
	    try {
		String infile = (String)argvec.elementAt(0);
		String outfile = (String)argvec.elementAt(1);
		
		ImageIcon ii = new ImageIcon(infile);
		Image im = ii.getImage();
		int height = im.getHeight(null);
		int width = im.getWidth(null);
		System.out.println("Dimensions: "+width+"x"+height);
		double newwidth = width*Math.abs(Math.cos(angle)) + height*Math.abs(Math.sin(angle));
		double newheight = width*Math.abs(Math.sin(angle)) + height*Math.abs(Math.cos(angle));
		BufferedImage bi = new BufferedImage((int)newwidth,(int)newheight,BufferedImage.TYPE_3BYTE_BGR);
		Graphics2D g = bi.createGraphics();
		g.translate(newwidth/2,newheight/2);
		g.rotate(angle);
		g.drawImage(im,-width/2,-height/2,null);
		for (int i = 0; i<argvec.size(); i++)
		    System.out.println(argvec.elementAt(i));
		FileOutputStream out = new FileOutputStream(outfile);
		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
		JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
		param.setQuality((float)quality,false);
		encoder.setJPEGEncodeParam(param);
		encoder.encode(bi);
		out.flush();
		out.close();
	    } catch (Exception e){
		e.printStackTrace();
	    }
	else {
	    System.out.println("Usage: java GIFtoJPEG [options] input.gif output.jpeg");
	}
	System.out.println("End of main reached");
	System.exit(0);
    }
    
}
