Estou desenvolvendo uma aplicação que faz exatamente isso. Este codigo é para imagens jpg mas se vc quiser usar outros formatos (gif, png, tirf) é só alterar o codec.
Espero ter ajudado.
//Codigo:
package com.banco;
import com.sun.image.codec.jpeg.JPEGImageDecoder;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.InputStream;
import java.awt.image.BufferedImage;
import java.awt.image.AffineTransformOp;
import java.awt.geom.AffineTransform;
import java.awt.*;
public class ResizeImage {
public boolean resizeImage(InputStream source, OutputStream dest, int nWidth, int nHeight) throws Exception {
boolean backimageresize = false;
JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(source);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(dest);
// made instance variable for efficiency reasons
BufferedImage sourceImg = decoder.decodeAsBufferedImage();
BufferedImage imgThumb = scaleToSize(nWidth, nHeight, sourceImg);
JPEGEncodeParam param = JPEGCodec.getDefaultJPEGEncodeParam(imgThumb);
param.setQuality(0.8F, false);
encoder.encode(imgThumb, param);
encoder.encode(imgThumb);
backimageresize = true;
return backimageresize;
}
public static BufferedImage scaleToSize(int nMaxWidth, int nMaxHeight, BufferedImage imgSrc) {
int nHeight = imgSrc.getHeight();
int nWidth = imgSrc.getWidth();
double scaleX = (double)nMaxWidth / (double)nWidth;
double scaleY = (double)nMaxHeight / (double)nHeight;
double fScale = Math.min(scaleX, scaleY);
return scale(fScale, imgSrc);
}
public static BufferedImage scale(double scale, BufferedImage srcImg) {
if (scale == 1 ) {
return srcImg;
}
AffineTransform xform = AffineTransform.getScaleInstance(scale, scale);
RenderingHints hints = new RenderingHints(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
AffineTransformOp op = new AffineTransformOp(xform, hints);
BufferedImage dstImg = op.createCompatibleDestImage(srcImg,
srcImg.getColorModel());
return op.filter(srcImg, dstImg);
}
public static void main(String [] args){
ResizeImage imagem = new ResizeImage();
try {
imagem.resizeImage(new FileInputStream("Missao_impossivel.jpg"),
new FileOutputStream("testeImagem.jpg"),300,200);
} catch (Exception e) {
e.printStackTrace(); //To change body of catch statement use Options | File Templates.
}
}
}