Redimensionar Imagens JPG

1 resposta
R

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

1 Resposta

Rafael_Steil

De uma olhada nessa classe:

https://jforum.dev.java.net/source/browse/jforum/src/net/jforum/util/image/ImageUtils.java?rev=1.11&content-type=text/vnd.viewcvs-markup

Rafael

Criado 10 de dezembro de 2004
Ultima resposta 11 de dez. de 2004
Respostas 1
Participantes 2