Мы используем Java2D для изменения размера фотографий, загруженных на наш веб-сайт, но мы сталкиваемся с проблемой (казалось бы, старой, cf.: http://forums.sun.com/thread.jspa?threadID=5425569) - несколько конкретных JPEG файлов повышают CMMException
при попытке ImageIO.read()
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()
, сервлет-кодом и т.д.)
Мы сузили его к фотографиям, снятым на определенных камерах, и я выбрал фотографию, которая вызывает эту ошибку: 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, которое мы можем использовать?
Спасибо!