Exif画像データも全てコピーした画像をコピーしたい。
jpgを画像オブジェクトに読み込み、サイズを変更してから、画像オブジェクトを別のフォルダーのjpgファイルに書き込むJavaアプリがあります。
問題は、素晴らしい画像情報 (カメラ、日付など) がすべて失われることです。何か案は?
Exif画像データも全てコピーした画像をコピーしたい。
jpgを画像オブジェクトに読み込み、サイズを変更してから、画像オブジェクトを別のフォルダーのjpgファイルに書き込むJavaアプリがあります。
問題は、素晴らしい画像情報 (カメラ、日付など) がすべて失われることです。何か案は?
1 つのオプションは、次のようにイメージ 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());
}
}
落とし穴:
Android を対象としていますが、このソリューションは Java であり、あるファイルから別のファイルにすべての EXIF メタデータをコピーするのに役立ちます。
http://bricolsoftconsulting.com/copying-exif-metadata-using-sanselan/
Sanselan は最近 Commons Imaging にブランド変更されたことに注意してください。