在jpeg中保存色彩空间

时间:2011-04-07 19:43:12

标签: java jpeg javax.imageio color-space

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

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

如果你想知道它有所不同,没有配置文件的图像在我的屏幕(Safari + OSX +校准屏幕)上更加饱和,然后他们拥有正确的sRGB配置文件。此外,我确定这是缺少的配置文件信息,而不是重采样算法。

1 个答案:

答案 0 :(得分: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) {

                }
        }
    }