【发布时间】:2019-12-01 15:34:08
【问题描述】:
我们正在使用 Java2D 调整上传到我们网站的照片的大小,但我们遇到了一个问题(一个看似旧的问题,参见:http://forums.sun.com/thread.jspa?threadID=5425569) - 当我们尝试使用 @987654327 时,一些特定的 JPEG 会引发 CMMException @ 一个包含其二进制数据的 InputStream:
java.awt.color.CMMException: Invalid image format
at sun.awt.color.CMM.checkStatus(CMM.java:131)
at sun.awt.color.ICC_Transform.<init>(ICC_Transform.java:89)
at java.awt.image.ColorConvertOp.filter(ColorConvertOp.java:516)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.acceptPixels(JPEGImageReader.java:1114)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readImage(Native Method)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1082)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:897)
at javax.imageio.ImageIO.read(ImageIO.java:1422)
at javax.imageio.ImageIO.read(ImageIO.java:1326)
...
(截断堆栈跟踪的其余部分,即我们的ImageIO.read() 调用、servlet 代码等)
我们将范围缩小到使用特定相机拍摄的照片,我选择了一张触发此错误的照片:http://img214.imageshack.us/img214/5121/estacaosp.jpg。 我们注意到这只发生在 Sun 的 JVM 上(在 Linux 和 Mac 上,刚刚在 1.6.0_20 上进行了测试)——一台带有 OpenJDK 的测试机器可以顺利读取相同的照片,这可能是由于 JPEG 读取器的实现不同。
很遗憾,我们无法在生产环境中切换 JVM,也无法使用 ImageMagick (http://www.imagemagick.org/) 等依赖于本机的解决方案。
考虑到这一点,我的问题是:是否存在替代 ImageIOs JPEG 阅读器的替代品,它可以处理链接的照片等照片?如果没有,我们可以使用另一种 100% 纯 Java 照片大小调整解决方案吗?
谢谢!
【问题讨论】:
-
顺便说一下,我知道 ImageIO 不处理 CMYK 图像(根据stackoverflow.com/questions/2408613/…)。但是示例之一是 RGB(就 Mac 预览而言,如果有人能确认这一点会很高兴)
-
我在这里打开了一个关于 Oracle/Sun 错误数据库的错误:bugs.sun.com/bugdatabase/view_bug.do?bug_id=7064516 如果您仍然对修复感兴趣,请投票!
-
请注意,此错误在 2012 年被标记为“在 Java 8b56 中修复”。因此,另一种解决方案是更新到最新的 Java 8(或更高版本)。
标签: java jpeg java-2d javax.imageio resize-image