Re: How to resize a JPG image file



Chris Berg wrote:
I need to re-size a .jpg image. This is what I do:

(tDim is the required new Dimension)
  Image newImg =
javax.imageio.ImageIO.read(myFile).getScaledInstance(tDim.width,
tDim.height,Image.SCALE_SMOOTH);
  java.awt.image.BufferedImage bim =
      new java.awt.image.BufferedImage(tDim.width,
tDim.height, java.awt.image.BufferedImage.TYPE_INT_RGB);
  bim.createGraphics().drawImage(newImg, 0, 0, null);
  FileOutputStream fos = new FileOutputStream(ofName);
  javax.imageio.ImageIO.write(bim, "jpg", fos);
  fos.close();

Is this the smartest (fastest, least ressource-using) way to do it?
And is TYPE_INT_RGB the right choice?

Chris


Chris:

Looks pretty good. I did a similar one that I use with my web cam to scale the image.

import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;

public class ScaleImage2 {
    public static void scale(String srcFile, int destWidth, int destHeight,
     String destFile) throws IOException {
        BufferedImage src = ImageIO.read(new File(srcFile));
        BufferedImage dest =  new BufferedImage(destWidth,destHeight,
         BufferedImage.TYPE_INT_RGB);
        Graphics2D g = dest.createGraphics();
        AffineTransform at = AffineTransform.getScaleInstance(
         (double)destWidth/src.getWidth(),
         (double)destHeight/src.getHeight());
        g.drawRenderedImage(src,at);
        ImageIO.write(dest,"JPG",new File(destFile));
    }

    public static void main(String[] args) {
        if (args.length == 4) {
            try {

scale(args[0],Integer.parseInt(args[1]),Integer.parseInt(args[2]),
args[3]);
} catch (Exception e) {
System.out.println(e);
}
} else
System.out.println("\nUsage: java -jar ScaleImage2.jar srcfile " +
"width height destfile\n");
}
}


--

Knute Johnson
email s/nospam/knute/
.