有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在jpeg中节省色彩空间

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

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

如果您想知道这会有什么不同,那么没有配置文件的图像在我的屏幕(Safari+OSX+校准屏幕)上会比有正确的sRGB配置文件的图像饱和得多。此外,我确信这是丢失的配置文件信息,而不是重采样算法


共 (1) 个答案

  1. # 1 楼答案

    事实证明,包含一个EXIF标记ColorSpace=1就足够了,它告诉我们应该将其作为sRGB处理。使用Apache Commons Sanselan成功地实现了这一点。不幸的是,这个库并不完整,所以它只能在创建文件后用于修改EXIF

    相关代码,基于梵语示例:

    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) {
    
                    }
            }
        }