Oi pessoal, dúvida de um sistema já em funcionamento. Criei uma ferramenta que faz upload de uma imagem, recorta a imagem, salva esta imagem recortada e cria uma miniatura(Esse é o problema).
Tudo ocorre ok, mas a miniatura, no momento em que eu a salvo, fica com uma especie de layer de cor em cima dela, a imagem é toda branca e ele cobre com um alpha sepia mais ou menos, até agora não sei o que pode ser e estou doido com isso já kkkkkkk, segue o código que realiza o redimensionamento. O código que precede não tem erros.
public void salvarImagemRecortada{
.
.
BufferedImage miniatura = ImageIO.read(new File(newFileName));
ImageIO.write(resizeTrick(miniatura, 100, 55), "jpeg", new File(newFileName2));
.
.
}
private static BufferedImage resize(BufferedImage image, int width, int height) {
int type = image.getType() == 0 ? BufferedImage.TYPE_INT_RGB : image.getType();
BufferedImage resizedImage = new BufferedImage(width, height, type);
Graphics2D g = resizedImage.createGraphics();
g.setComposite(AlphaComposite.Src);
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.drawImage(image, 0, 0, width, height, null);
g.dispose();
return resizedImage;
}
private static BufferedImage resizeTrick(BufferedImage image, int width, int height) {
image = createCompatibleImage(image);
image = resize(image, 100, 100);
image = blurImage(image);
return resize(image, width, height);
}
public static BufferedImage blurImage(BufferedImage image) {
float ninth = 1.0f / 9.0f;
float[] blurKernel = {
ninth, ninth, ninth,
ninth, ninth, ninth,
ninth, ninth, ninth
};
Map<RenderingHints.Key, Object> map = new HashMap<RenderingHints.Key, Object>();
map.put(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
map.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
map.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
RenderingHints hints = new RenderingHints(map);
BufferedImageOp op = new ConvolveOp(new Kernel(3, 3, blurKernel), ConvolveOp.EDGE_NO_OP, hints);
return op.filter(image, null);
}
private static BufferedImage createCompatibleImage(BufferedImage image) {
GraphicsConfiguration gc = BufferedImageGraphicsConfig.getConfig(image);
int w = image.getWidth();
int h = image.getHeight();
BufferedImage result = gc.createCompatibleImage(w, h, Transparency.TRANSLUCENT);
Graphics2D g2 = result.createGraphics();
g2.drawRenderedImage(image, null);
g2.dispose();
return result;
}
n tem exception, já debuguei e está tudo ok, n entendo o porquê de isso estar acontecendo. Estou postando um exemplo de recorte aqui dele e da miniatura.
obs, a imagem aqui no upload da miniatura parece estar ok, mas se você fizer o download dela, você verá o sépia.