2

我有一个 servlet 来转换和缓存较小版本的照片。它是使用 java.awt.image + javax.imageio 和第三方重采样过滤器实现的。原件均使用 sRGB 颜色配置文件上传。当我重新采样它们并再次保存它们时,它们仍然在 sRGB 中,但这并没有记录在保存的文件中。

如何确保此信息保存在文件中?

如果您想知道它会有所不同,那么在我的屏幕(Safari + OSX + Calibrated 屏幕)上,没有配置文件的图像比具有正确 sRGB 配置文件的图像更加饱和。此外,我确定这是缺少配置文件信息,而不是重采样算法。

4

1 回答 1

0

事实证明,包含一个 EXIF 标签 ColorSpace=1 就足够了,它告诉它应该被处理为 sRGB。使用 Apache Commons Sanselan 成功地做到了这一点。不幸的是,这个库并不完整,因此它只能在文件创建后用于修改 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 回答