我想复制带有所有 Exif 图像数据的图像。
我有一个 Java 应用程序,它将 jpg 读入图像对象,调整大小,然后将图像对象写入另一个文件夹中的 jpg 文件。
问题是它丢失了所有漂亮的图像信息(相机、日期等)。有任何想法吗?
我想复制带有所有 Exif 图像数据的图像。
我有一个 Java 应用程序,它将 jpg 读入图像对象,调整大小,然后将图像对象写入另一个文件夹中的 jpg 文件。
问题是它丢失了所有漂亮的图像信息(相机、日期等)。有任何想法吗?
虽然适用于 Android,但此解决方案是 Java 语言,应该有助于将所有 EXIF 元数据从一个文件复制到另一个文件:
http://bricolsoftconsulting.com/copying-exif-metadata-using-sanselan/
请注意,Sanselan 最近已更名为 Commons Imaging,可在此处找到:
一种选择是像这样使用图像 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());
}
}
陷阱: