Чтение JPEG в Java

Я пытаюсь получить JPEG в BufferedImage для отображения на JPanel . Тем не менее, javax.imageio.ImageIO.read(), похоже, очень суетливо относится к обрабатываемым файлам JPEG, часто выдавая IIOException. Те же самые JPEG-файлы прекрасно открываются практически в любой программе чтения изображений, какую вы только захотите назвать.

Я просмотрел Sanselan Apache и JAI. Но Sanselan не может обрабатывать файлы JPEG, а JAI недоступен для 64-битных платформ Windows и, похоже, не поддерживается (последнее обновление было в 2006 году). Предыдущий ответ на StackOverflow предлагал com.sun.image.codec.jpeg.JPEGCodec, но это устарело в Java 5 и исчез в 7.

Это мои единственные варианты? Действительно ли нет библиотек Java, способных надежно читать JPEG в BufferedImage?


person Chinmay Kanchi    schedule 19.07.2012    source источник
comment
Попробуйте использовать другую картинку для проверки.   -  person Jason    schedule 19.07.2012
comment
@Jason: Другое изображение не имеет значения. Некоторые картинки действительно загружаются нормально. Проблема в том, что некоторые этого не делают. При использовании изображений из разных источников не каждое изображение будет соответствовать определению идеального JPEG, которое дает ImageIO.read().   -  person Chinmay Kanchi    schedule 19.07.2012
comment
Можно ссылку на пример изображения? Обнаружили ли вы какие-либо отклонения от номинального стандарта?   -  person trashgod    schedule 19.07.2012
comment
Может быть, вы можете получить ответ из этого сообщения: stackoverflow.com/questions/2999528/   -  person Jason    schedule 19.07.2012
comment
Тот, на который есть ссылка в stackoverflow.com/questions/2999528/ является примером. Это известная проблема с ImageIO (см. ссылку). Я специально ищу альтернативную библиотеку.   -  person Chinmay Kanchi    schedule 19.07.2012


Ответы (1)


Устаревшие методы Toolkit, такие как createImage и getImage известны как более снисходительные, чем ImageIO.

Вернер Рандельсхофер также написал поставщика услуг для чтения CMYK JPEG с ImageIO.

Комбинируя оба подхода (попробуйте все возможные ImageReader, а затем откатитесь к Toolkit), вы сможете обрабатывать разумное количество изображений JPEG.

Чтение файлов JPEG с профилем CMYK может быть интересно читать.

person Anthony Accioly    schedule 19.07.2012
comment
Кажется, это может сработать. У меня не будет времени какое-то время работать над этим проектом, поэтому я приму этот ответ. Это действительно отстой, что на Java нет хорошей библиотеки для простой обработки изображений, даже сторонней. Наверняка люди нуждались в чем-то подобном раньше... - person Chinmay Kanchi; 20.07.2012