2

Exif画像データも全てコピーした画像をコピーしたい。

jpgを画像オブジェクトに読み込み、サイズを変更してから、画像オブジェクトを別のフォルダーのjpgファイルに書き込むJavaアプリがあります。

問題は、素晴らしい画像情報 (カメラ、日付など) がすべて失われることです。何か案は?

4

2 に答える 2

0

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());
        }
    }

落とし穴:

  • 一般的に画像IOフレームワークとして遅い
  • 一部のまれな画像では、不可解に失敗します。例 (javax.imageio.IIOException: JPEG ファイルではありません: 0xff 0xe2 で始まる)
  • ソース イメージとターゲット イメージに同じカラー モデルを使用する必要があります。その結果、バイリニアまたはバイキュービック補間を使用できません
于 2015-10-28T23:17:35.097 に答える
0

Android を対象としていますが、このソリューションは Java であり、あるファイルから別のファイルにすべての EXIF メタデータをコピーするのに役立ちます。

http://bricolsoftconsulting.com/copying-exif-metadata-using-sanselan/

Sanselan は最近 Commons Imaging にブランド変更されたことに注意してください。

http://commons.apache.org/imaging/

于 2012-12-09T03:08:46.283 に答える