Gostaria de saber qual é o jeito mais eficiente de redimensionar imagens JPG. Eu estou querendo fazer um sistema do tipo batch, o usuário envia um arquivo zip e o sistema se encarrega de redimensionar as imagens.
Bem, meu problema eh o seguinte: O sistema que eu estou usando é muito lento, vou explicá-lo melhor.
Tenho um metodo que cuida de receber os objetos de upload do formulario. Ele manda um InputStream pra uma classe que dezipa o arquivo. Essa classe recebe o InputStream e envia um ZipInputStream (um pra cada aquivo do zip) pra classe que redimensiona. O metodo nesssa é o doResize.
Esse é o codigo da minha classe que redimensiona as imagens:
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Panel;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public void doResize(InputStream originalImage, String newImage, double factor) throws Exception {
Image img = ImageIO.read(originalImage);
loadImage(img);
int iw = img.getWidth(this);
int ih = img.getHeight(this);
//Reduce the image
int w = (int) (iw * factor);
Image i2 = img.getScaledInstance(w, -1, 0);
loadImage(i2);
this.processaImagem(i2, newImage);
}
//Use JPEGImageEncoder to write the BufferedImage to a file
try {
OutputStream os = new FileOutputStream(newImage);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);
JPEGEncodeParam param = JPEGCodec.getDefaultJPEGEncodeParam(bi);
param.setQuality(1, false); // use maximum quality
encoder.encode(bi);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
/**
* Cause the image to be loaded into the Image object
*/
private void loadImage(Image img) {
try {
MediaTracker tracker = new MediaTracker(this);
tracker.addImage(img, 0);
tracker.waitForID(0);
} catch (Exception e) {
}
}
Será q essa classe nao eh eficiente para arquivos em batch ?? Qual seria a solucao mais eficiente ? Muito obrigado