Мы используем Java2D для изменения размера фотографий, загруженных на наш веб-сайт, но мы сталкиваемся с проблемой (казалось бы, старая, ср .: 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.
Мы заметили, что это происходит только с JVM от Sun (на Linux и Mac, только что протестировал его на 1.6.0_20) - тестовая машина с OpenJDK считывает те же фотографии без помех, возможно, из-за другой реализации читателя JPEG.
К сожалению, мы не можем ни включить JVM в производство, ни использовать собственные решения, такие как ImageMagick (http://www.imagemagick.org/).
Учитывая это, мой вопрос: существует ли замена для JPEG-ридера ImageIO, который может обрабатывать фотографии, такие как связанные? Если нет, то можем ли мы использовать другое решение для изменения размера фотографий Java на 100%?
Спасибо!