Dae galera, hoje resolvi postar um código bem legal, que uso pra gerar thumbs de imagens com java.É bem util quando precisamos trabalhar com imagens para web. A partir das classes que gerenciam uploads de imagens eu gosto de guardar a imagem original e uma miniatura(thumbs) da mesma, desta forma, na visualização ou na criação de listas e relatórios eu uso a miniatura, que tem um ganho no tempo de resposta para o usuario pois seu tamanho é menor, e na visualização detalhada posso apresentar a imagem no tamanho original. Lembrando que na web não adianta salvar uma imagem grande e tentar alterar o tamanho pelo HTML com as propriedades width e height, essas propriedades só vão ter influencia no tamanho visivel, mas o tamanho em bytes enviado para o navegador do usuario será o mesmo, isso pode deixar seu site muio lento.
O código:[code language=”java”]
/**
* @author Jean C Becker
* @version 1.0
* Método para gerar thumbs de uma imagem.
* @param imagemOriginal Array de bytes da imagem original.
* @return byte[]
*/
public static byte[] geraThu(byte[] imagemOriginal) throws InterruptedException, IOException {
Image imagem = Toolkit.getDefaultToolkit().createImage(imagemOriginal);
MediaTracker mediaTracker = new MediaTracker(new Container());
mediaTracker.addImage(imagem, 0);
mediaTracker.waitForID(0);
// define a qualidade da imagem
int qualidade = 100; // 100%
// define a largura e altura do thumbnail
int largura = 150;
int altura = 100;
double thumbRatio = (double) largura / (double) altura;
int larguraImagem = imagem.getWidth(null);
int alturaImagem = imagem.getHeight(null);
double imageRatio = (double) larguraImagem / (double) alturaImagem;
if (thumbRatio < imageRatio) {
altura = (int) (largura / imageRatio);
} else {
largura = (int) (altura * imageRatio);
}
// Desenha a imagem original para o thumbnail e
// redimensiona para o novo tamanhoBufferedImage thumbImage = new BufferedImage(largura,
altura, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2D = thumbImage.createGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.drawImage(imagem, 0, 0, largura, altura, null);// Salva a nova imagem
ByteArrayOutputStream out = new ByteArrayOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(thumbImage);
param.setQuality((float) qualidade / 100.0f, false);
encoder.setJPEGEncodeParam(param);
encoder.encode(thumbImage);
byte[] imagemThumb = out.toByteArray();
out.close();return imagemThumb;
}
[/code]
Até a próxima =D
Olá. Tambem programo em Java.
Vi seu código. Só tenho dúvida numa coisa. Voce fez esta função que retorna um vetor de bytes. OK peguei a imagem e transformei ela em byte.
byte[] imagem =”img/Fotos.png”.getBytes();
passei a imagem como parametro
imagem =geraThu(imagem);
E agora queria saber como fazer para gravar a imagem no local ou terminar, porque mesmo executado isso, ainda nao foi gerado o thumb.
Dsde já, muito obrigado
Julio
Boa tarde Julio, não sei se entendi bem sua duvida, mas o thumb é o array de bytes de retorno do método. Após pegar este retorno você pode gravar em banco ou salvar em arquivo usando o FileWriter por exemplo.
perfeito! me ajudo 1 monte