Define Parameters:
String infile; // image from Infile
String outfile; // image to outfile
int thumbWidth; // convert max width
int thumbHeight; //convert max height
int quality; //converet quolity 0 to 100
import com.sun.image.codec.jpeg.ImageFormatException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import java.awt.Container;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* from JPEG or
*/
public class ImageScaleConverter {
String infile; // image from Infile
String outfile; // image to outfile
int thumbWidth; // convert max width
int thumbHeight; //convert max height
int quality; //converet quolity 0 to 100
public ImageScaleConverter(String infile, String outfile, int thumbWidth, int thumbHeight, int quality) {
this.infile = infile;
this.outfile = outfile;
this.thumbWidth = thumbWidth;
this.thumbHeight = thumbHeight;
this.quality = quality;
}
public void convert() {
BufferedOutputStream out = null;
try {
Image image = Toolkit.getDefaultToolkit().getImage(infile);
MediaTracker mediaTracker = new MediaTracker(new Container());
mediaTracker.addImage(image, 0);
mediaTracker.waitForID(0);
double thumbRatio = (double) thumbWidth / (double) thumbHeight;
int imageWidth = image.getWidth(null);
int imageHeight = image.getHeight(null);
double imageRatio = (double) imageWidth / (double) imageHeight;
if (thumbRatio < imageRatio) {
thumbHeight = (int) (thumbWidth / imageRatio);
} else {
thumbWidth = (int) (thumbHeight * imageRatio);
}
BufferedImage thumbImage = new BufferedImage(thumbWidth, thumbHeight, BufferedImage.TYPE_INT_RGB);
thumbImage = convertToJpeg(thumbImage);
Graphics2D graphics2D = thumbImage.createGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null);
out = new BufferedOutputStream(new FileOutputStream(outfile));
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(thumbImage);
quality = Math.max(0, Math.min(quality, 100));
param.setQuality((float) quality / 100.0f, false);
encoder.setJPEGEncodeParam(param);
encoder.encode(thumbImage);
out.close();
} catch (IOException ex) {
Logger.getLogger(ImageScaleConverter.class.getName()).log(Level.SEVERE, null, ex);
} catch (ImageFormatException ex) {
Logger.getLogger(ImageScaleConverter.class.getName()).log(Level.SEVERE, null, ex);
} catch (InterruptedException ex) {
Logger.getLogger(ImageScaleConverter.class.getName()).log(Level.SEVERE, null, ex);
} finally {
try {
out.close();
} catch (IOException ex) {
Logger.getLogger(ImageScaleConverter.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
private BufferedImage convertToJpeg(BufferedImage image) {
BufferedImage convertedImage = new BufferedImage(
image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB);
convertedImage.getGraphics().drawImage(image, 0, 0, null);
return convertedImage;
}
public static void main(String[] args) {
ImageScaleConverter ic = new ImageScaleConverter("infile path", "outfile path", 300, 500, 100);
ic.convert();
}
}
No comments:
Post a Comment