我有一个方法来读取图像,转换它们(大小,格式)并将它们写回.这总是很好用,但现在我遇到了一些显然包含一些元数据(IPTC)的JPEG图像(来自新闻社).转换这些图像时,颜色都是错误的.我的第一个猜测是,那些是CMYK图像,但它们不是.
问题必须来自阅读,因为无论我是将图像转换为较小的JPEG还是PNG,它总是看起来一样.
起初,我曾经ImageIO.read()读过这张照片.我现在得到实际的ImageReadervia ImageIO.getImageReadersByMIMEType()并尝试告诉读者通过设置ignoreMetadata参数ImageReader#setInput(Object input, boolean seekForwardOnly, boolean ignoreMetadata)但忽略元数据但没有成功.
然后我创建了一个没有元数据的图像版本(使用Fireworks).该图像已正确转换.
我能找到的唯一区别是,对于未工作的图像,读者变量的colorSpaceCode值为2,而对于工作图像,值为3.还有一个outColorSpaceCode是2两个图像.
由于读者的源评论仅表示Set by setImageData本机代码回调.一个修改过的IJG + NIFTY颜色空间代码我现在真的被卡住了.所以任何帮助将不胜感激.
您可以通过此处并单击下载来获取原始图像(~3 MB).下图左侧显示了我从原始图像中获得的内容,右侧显示了它应该是什么样子.
