我想要复制所有Exif图像数据的图像。
我有一个Java应用程序,它将jpg读入图像对象,调整大小,然后将图像对象写入另一个文件夹中的jpg文件。
问题在于它丢失了所有漂亮的图像信息(相机,日期等)。 有什么想法吗?
答案 0 :(得分:0)
虽然适用于Android,但此解决方案使用Java,并且有助于将所有EXIF元数据从一个文件复制到另一个文件:
http://bricolsoftconsulting.com/copying-exif-metadata-using-sanselan/
请注意,Sanselan最近已重新命名为Commons Imaging,可在此处找到:
答案 1 :(得分:0)
一种选择是使用像这样的图像IO:
try (ImageInputStream inputStream = new FileImageInputStream(new File("Landscape_3.jpg"))) {
Iterator<ImageReader> readerIterator = ImageIO.getImageReaders(inputStream);
ImageReader reader = readerIterator.next();
reader.setInput(inputStream);
Iterator<IIOImage> imageIterator = reader.readAll(null);
IIOImage image = imageIterator.next();
BufferedImage srcImage = (BufferedImage) image.getRenderedImage();
AffineTransformOp scaleOp = new AffineTransformOp(AffineTransform.getScaleInstance(0.5, 0.5), AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
BufferedImage resultImage = scaleOp.createCompatibleDestImage(srcImage, null);
resultImage = scaleOp.filter(srcImage, resultImage);
image.setRenderedImage(resultImage);
ImageWriter writer = ImageIO.getImageWriter(reader);
try (ImageOutputStream outputStream = new FileImageOutputStream(new File("Landscape_3_preserve_exif.jpg"))) {
writer.setOutput(outputStream);
writer.write(image);
}
try (ImageOutputStream outputStream = new FileImageOutputStream(new File("Landscape_3_discard_exif.jpg"))) {
writer.setOutput(outputStream);
writer.write(image.getRenderedImage());
}
}
缺陷: