我们正在使用Java2D来调整上传到我们网站的照片大小,但是我们遇到了一个问题(似乎是一个旧问题,参见:http://forums.sun.com/thread.jspa?threadID=5425569)- 当我们尝试
ImageIO.read()
读取包含它们二进制数据的InputStream时,一些特定的JPEG会引发CMMException
: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)
...
我们已经缩小了范围,发现只有特定相机拍摄的照片会导致这个错误: http://img214.imageshack.us/img214/5121/estacaosp.jpg。 我们注意到只有 Sun 的 JVM(在 Linux 和 Mac 上,刚测试了 1.6.0_20)会出现这种情况 - 使用 OpenJDK 的测试机器可以毫无问题地读取相同的照片,可能是由于 JPEG 阅读器的不同实现所导致。
不幸的是,我们无法在生产环境中切换 JVM,也不能使用依赖本机的解决方案,如 ImageMagick (http://www.imagemagick.org/)。
考虑到这一点,我的问题是:是否存在可以处理像链接中那样的照片的 ImageIO 的 JPEG 阅读器替代品? 如果没有,是否有其他 100% 纯 Java 的照片调整大小解决方案可供我们使用?
谢谢!