Gerar Thumbs via Java

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:
/**
* @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 tamanho BufferedImage 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

Artigos Relacionados:

3 comentários em “Gerar Thumbs via Java

  • 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.

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *