【发布时间】:2014-08-07 16:46:46
【问题描述】:
我正在尝试读取用户上传的 JPEG 图像(任意)以在服务器应用程序中创建缩略图。 系统在 Windows7 / Oracle Java 8u11 中运行良好,但服务器上 CentOS 下的颜色模型有问题:
原图为:
http://studio-st.ru/media/portfolio/image/45
Windows下开发工作站上生成的缩略图是绝对正确的
Linux 下的结果发生颜色偏移(Java 8u05 为红色,Java 8u11 为颜色偏移)。此处未展示,因为原始示例已在现场,现已修复。
更深入的调查表明,问题在于读取图像 - Windows 和 Linux 上的 ImageIO.read(inputStream) 返回具有完全相同参数的图像对象,但是相同图像(仅读取)的颜色探针 getRGB(x,y) 返回不同的值。
Java 8u05 和 8u11 在 Linux 中处理的颜色不同,8u05 为“偏红”,8u11 如上所示。
这与 Alpha 通道无关 - 此特定源图像是 JPEG 类型 5 (TYPE_3BYTE_BGR),从 Adobe Lightroom 导出并转换为 sRGB,没有任何其他技巧。
这也会影响当时导出的所有图片(实际上是本网站上的所有图片)。
谁能提供一些关于如何使它工作的建议(除了等待 JDK 的修复)?或许推荐其他库,可以在这里使用(EJB,数据存储在 MongoDB 中,因此使用 InputStreams 获取数据 - 无文件系统访问)。
谢谢!
更新: 问题似乎与 Java8 的新颜色管理模块有关——它不理解这种图像格式。切换到旧版 CMM 解决了该问题。请在下面的正确评论中查看详细信息。
【问题讨论】:
-
谢谢,JAI 要做一些实验...
标签: java image-processing java-8 javax.imageio