我们正在使用 Java2D 调整上传到我们网站的照片的大小,但我们遇到了一个问题(一个看似旧的问题,参见: http: //forums.sun.com/thread.jspa?threadID=5425569) - 一些特殊的 JPEGCMMException
当我们尝试ImageIO.read()
包含其二进制数据的 InputStream时引发 a :
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 照片大小调整解决方案吗?
谢谢!