我有一个 servlet 来转换和缓存较小版本的照片。它是使用 java.awt.image + javax.imageio 和第三方重采样过滤器实现的。原件均使用 sRGB 颜色配置文件上传。当我重新采样并再次保存它们时,它们仍然处于 sRGB 格式,但这不会记录在保存的文件中。
如何确保此信息已保存在文件中?
如果您想知道它有什么不同,那么没有配置文件的图像在我的屏幕(Safari + OSX + 校准屏幕)上比具有正确的 sRGB 配置文件时更加饱和。我也确信这是丢失的配置文件信息,而不是重采样算法。
事实证明,包含一个 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) {
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)