Je cherche une solution à un
problème depuis un moment :
Jessaie de sauvegarder des
vignettes de photos en JPEG tout en sauvegardant les infos EXIF.
Ca marche sans problème excepté pour
les photos verticales après rotation,
jobtiens une photo
en « 2 tons » vert et violet.
Ci-dessous la méthode de création
dun vignette :
public void createThumbnail( String orig, String thumb, int maxDim) {
try {
// Get the image from a file.
Image inImage = new ImageIcon(orig).getImage();
//int maxDim=120;
// Determine the scale.
double scale = (double)maxDim/(double)inImage.getHeight(null);
if (inImage.getWidth(null) > inImage.getHeight(null)) {
scale = (double)maxDim/(double)inImage.getWidth(null);
}
// Determine size of new image.
//One of them
// should equal maxDim.
int scaledW = (int)(scale*inImage.getWidth(null));
int scaledH = (int)(scale*inImage.getHeight(null));
// int scaledW = 120;
// int scaledH = 120;
// Create an image buffer in
//which to paint on.
BufferedImage outImage =
new BufferedImage(scaledW, scaledH,
BufferedImage.TYPE_INT_RGB);
// Set the scale.
AffineTransform tx =
new AffineTransform();
// If the image is smaller than
//the desired image size,
// don't bother scaling.
if (scale < 1.0d) {
tx.scale(scale, scale);
}
// Paint image.
Graphics2D g2d =
outImage.createGraphics();
g2d.drawImage(inImage, tx, null);
g2d.dispose();
// JPEG-encode the image
//and write to file.
File srcImageFile = new File(orig);
ImageInputStream iis = ImageIO.createImageInputStream(srcImageFile);
ImageReader reader = (ImageReader) ImageIO.getImageReaders(iis).next();
reader.setInput(iis);
IIOImage srcIIOImage = reader.readAll(0, null);
// Writing IIOImage
File destFile = new File(thumb);
IIOImage destIIOImage = new IIOImage(outImage, null, srcIIOImage.getMetadata());
ImageOutputStream ios = ImageIO.createImageOutputStream(destFile);
ImageWriter writer = (ImageWriter) ImageIO.getImageWritersByFormatName("jpg").next();
writer.setOutput(ios);
ImageWriteParam writeParam = writer.getDefaultWriteParam();
writer.write( destIIOImage );
writer.dispose();
ios.close();
//ImageIO.write(outImage, "jpg", destFile);
// OutputStream os =
// new FileOutputStream(thumb);
// JPEGImageEncoder encoder =
// JPEGCodec.createJPEGEncoder(os);
// encoder.encode(outImage);
// jpegW = new JpegCommentWriter( os, new FileInputStream(orig));
// jpegW.write("");
// jpegW.close();
// os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Merci,