sábado, 17 de setembro de 2011

Java - Criando Thumbnail de uma imagem

Postarei hoje uma forma que encontrei, e que estou usando, para gerar thumbnail de uma imagem armazenada em byte[].

No meu caso, estou armazenando a imagem no banco de dados e tenho um bean Imagem que tem o atributo 'arquivo' do tipo byte[]. No momento que quero exibí-lo como um thumbnail, eu uso tal código. Esse código pode ser usado em Servlets, por exemplo. Estou usando para gerar um StreamedContent para o p:graphicImage do PrimeFaces.


Vamos ao código:


@Transient
private static final int MAX_THUMBNAIL_WIDTH = 100;
 
@Transient
public byte[] getThumbnail(byte[] arquivo){
   ImageIcon imageIcon = new ImageIcon(arquivo);
   Image inImage = imageIcon.getImage();
   double scale = (double) MAX_THUMBNAIL_WIDTH / (double) inImage.getWidth(null);
 
   int scaledW = (int) (scale * inImage.getWidth(null));
   int scaledH = (int) (scale * inImage.getHeight(null));
 
   BufferedImage outImage = new BufferedImage(scaledW, scaledH, BufferedImage.TYPE_INT_RGB);
 
   AffineTransform tx = new AffineTransform();
   if(scale < 1.0d){
      tx.scale(scale, scale);
   }
 
   Graphics2D g2d = outImage.createGraphics();
   g2d.drawImage(inImage, tx, null);
   g2d.dispose();
 
   ByteArrayOutputStream baos = new ByteArrayOutputStream();
   try {
      ImageIO.write(outImage, "jpeg", baos);
      return baos.toByteArray();
   } catch (IOException e) {
      e.printStackTrace();
   }
   finally{
      try {
         baos.close();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
   return null;
}

2 comentários:

  1. Este comentário foi removido pelo autor.

    ResponderExcluir
  2. Ainda não precisei utilizar mas já adicionei nos meus favoritos caso precise algum dia, então não apague este post, rs.

    ResponderExcluir