Java 8 ImageIO在Linux中错误地读取JPEG

 mobiledu2502852923 发布于 2022-12-29 12:35

我正在尝试阅读用户上传的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解决了这个问题.请在下面的正确评论中查看详细信息

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有