frafael
Setembro 28, 2012, 7:47am
#1
Bom dia pessoal, estou tendo um problema ao redimensionar uma imagem .PNG, quando eu redimensiono a imagem ela perde a transparência e fica bem estranha. Alguém sabe como eu faço pra resolver isso?
File destino = new File(path + separator + empresa + separator + "imagens" + separator + "logo" + separator + this.logoFileName);
InputStream stream = foto.getFile();
IOUtils.copy(stream, new FileOutputStream(destino));
ThumbGenerator.generate(destino, destino, 65, 56);
WRYEL
Setembro 28, 2012, 9:17am
#2
quem é ThumbGenerator ?
tenta com uma lib mais alto nível: http://code.google.com/p/thumbnailator/wiki/Changes
frafael
Setembro 28, 2012, 9:23am
#3
Opa, desculpe, nem tinha percebido. É minha class que faz esse redimensionamento. Segue ela abaixo.
public class ThumbGenerator {
public static boolean generate(File source, File dest, int height, int width)
throws IOException {
if (source != null && dest != null) {
FileInputStream input = new FileInputStream(source);
try {
BufferedImage bufImage = ImageIO.read(input);
if (bufImage != null) {
width = width > bufImage.getWidth() ? bufImage.getWidth() : width;
height = bufImage.getHeight();
double scale = calcScale(bufImage, width, height);
BufferedImage imageScaled = scale(bufImage, scale);
FileOutputStream fos = new FileOutputStream(dest);
ImageIO.write(imageScaled, "JPG", fos);
fos.close();
input.close();
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
}
return false;
}
private static double calcScale(BufferedImage img, int width, int height) {
double scale1 = (double) width / (double) img.getWidth();
double scale2 = (double) height / (double) img.getHeight();
double scale = scale1 > scale2 ? scale2 : scale1;
return scale;
}
private static BufferedImage scale(BufferedImage img, double scale) {
int w = img.getWidth();
int h = img.getHeight();
BufferedImage scaled = new BufferedImage((int) (w * scale),
(int) (h * scale), BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = scaled.createGraphics();
g2.setComposite(AlphaComposite.Src);
g2.drawImage(img.getScaledInstance((int) (w * scale),
(int) (h * scale), Image.SCALE_SMOOTH), 0, 0,
(int) (w * scale), (int) (h * scale), null);
g2.dispose();
return scaled;
}
}
frafael
Setembro 28, 2012, 9:28am
#4
Vou tentar aqui com essa lib.
Muito bom, deu certo. Obrigado!