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;
}
Este comentário foi removido pelo autor.
ResponderExcluirAinda não precisei utilizar mas já adicionei nos meus favoritos caso precise algum dia, então não apague este post, rs.
ResponderExcluir