Ale*_*hov 6 java image-processing java-8 javax.imageio
我正在尝试阅读用户上传的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)返回不同的值.
Linux中的颜色在Java 8u05和8u11上有所不同,8u05是"红色",8u11如上所示.
这与alpha通道无关 - 这个特殊的源图像是JPEG Type 5(TYPE_3BYTE_BGR),从Adobe Lightroom导出并转换为sRGB,没有任何其他技巧.
这也会影响当时导出的所有图像(事实上,此网站上的所有图像).
任何人都可以提供一些有关如何使其工作的建议(除了等待JDK的修复)?也许推荐备用库,可以在这里使用(EJB,存储在MongoDB中的数据,因此使用InputStreams获取数据 - 无文件系统访问).
谢谢!
UPD:问题似乎与Java8的新色彩管理模块有关 - 它不了解这种图像格式.切换到旧版CMM解决了这个问题.请在下面的正确评论中查看详细信息
您可以尝试使用我的ImageIO JPEGImageReader 插件,它处理颜色转换的方式与默认的 JPEGImageReader 略有不同,因此它可能会有所帮助(抱歉,我的工作计算机不在附近,所以我现在无法测试自己)。如果没有帮助,我想修复它。我可以使用您的图像作为测试用例吗?:-)
另一件可能有帮助的事情是指定:
-Dsun.java2d.cmm=sun.java2d.cmm.kcms.KcmsServiceProvider
Run Code Online (Sandbox Code Playgroud)
在命令行上(或sun.java2d.cmm
使用其他方式相应地设置系统属性)。色彩管理模块 (CMM) 从 Sun/Kodak 的旧版 CMM 切换到 Java 8 中更新的开源 Little CMS。设置此系统属性将重新启用 Java 8 之前的旧版色彩管理。
正如您提到的没有磁盘访问,它几乎排除了 JMagick 或 im4j,因为它们最适合文件。不过,可能可以使用临时文件。
归档时间: |
|
查看次数: |
1406 次 |
最近记录: |