2

小さいバージョンの写真を変換してキャッシュするサーブレットがあります。これは、java.awt.image+javax.imageioとサードパーティのリサンプルフィルターを使用して実装されます。オリジナルはすべてsRGBカラープロファイルでアップロードされます。それらをリサンプリングして再度保存すると、まだsRGBのままですが、これは保存されたファイルに記録されません。

この情報がファイルに保存されていることを確認するにはどうすればよいですか?

違いが生じるのではないかと思われるかもしれませんが、プロファイルのない画像は、正しいsRGBプロファイルを使用している場合よりも、私の画面(Safari + OSX +キャリブレーション済み画面)ではるかに飽和状態になります。また、これは欠落しているプロファイル情報であり、リサンプリングアルゴリズムではないと確信しています。

4

1 に答える 1

0

sRGBとして処理する必要があることを示すEXIFタグColorSpace=1を含めるだけで十分であることがわかりました。ApacheCommonsSanselanを使用してこれを行うことに成功しました。このライブラリは残念ながら完全ではないため、ファイルの作成後にEXIFを変更するためにのみ使用できます。

Sanselanの例に基づく関連コード:

public void addExifMetadata(File jpegImageFile, File dst)
            throws IOException, ImageReadException, ImageWriteException {
        OutputStream os = null;
        try {
            TiffOutputSet outputSet = new TiffOutputSet();

            TiffOutputField colorspace = TiffOutputField.create(
                        TiffConstants.EXIF_TAG_COLOR_SPACE, outputSet.byteOrder, new Integer(1));
            TiffOutputDirectory exifDirectory = outputSet.getOrCreateExifDirectory();
            exifDirectory.add(colorspace);

            os = new FileOutputStream(dst);
            os = new BufferedOutputStream(os);
            new ExifRewriter().updateExifMetadataLossless(jpegImageFile, os, outputSet);

            os.close();
            os = null;
        } finally  {
            if (os != null)
                try {
                    os.close();
                } catch (IOException e) {

                }
        }
    }
于 2011-04-09T18:38:35.253 に答える