我有一个读取图像,转换它们(大小,格式)并将它们写回的方法。这一直运行得很好,但现在我遇到了一些显然包含一些元数据(IPTC)的JPEG图像(来自新闻社)。转换这些图像时,颜色都是错误的。我的第一个猜测是,那些是CMYK图像,但它们不是。错误颜色的JPEG图像
问题必须来自阅读,因为无论我将图像转换为较小的JPEG还是PNG,都无关紧要,它看起来总是相同的。
起初,我用ImageIO.read()
来读取图像。我现在通过ImageIO.getImageReadersByMIMEType()
得到实际的ImageReader
,并试图告诉读者通过设置ignoreMetadata
参数ImageReader#setInput(Object input, boolean seekForwardOnly, boolean ignoreMetadata)
忽略元数据,但没有成功。
然后我创建了一个没有元数据的图像版本(使用Fireworks)。该图像被正确转换。
我能找到,唯一的区别是,与不工作的形象价值读者的变量colorSpaceCode
是,whilest与工作形象,价值。还有一个outColorSpaceCode
这两个图像是。
由于source comment of the reader只说由setImageData本地代码回调设置。修改后的IJG + NIFTY颜色空间代码现在我真的被卡住了。所以任何帮助将不胜感激。
您可以通过here并点击下载获取原始图像(〜3 MB)。下面的左图显示了我从原始图像中获得的内容,右图显示了它应该是什么样子。
我已经有这个问题,只要我记得。它发生在我遇到的大约0.1%的jpg文件中。例如:http://chan.sankakustatic.com/data/cd/81/cd81a9fa1305b9c1887ab1ac4904d166.jpg我还没有找到一个解决方案,但在面板中正确显示它们。我的猜测是这是Java的JPEG解析器中的一个错误。 – 2012-02-22 09:57:24
可能的重叠:[用Java保存图片颜色改变](http://stackoverflow.com/questions/20789043/image-changes-color-when-saved-with-java) – 2013-12-26 18:25:46