Чтение изображений JCS_YCCK с использованием ImageIO

Я использую ImageIO.read обрабатывать загруженные файлы изображений. Код похож на

BufferedImage bufferedImage = ImageIO.read(new ByteArrayInputStream(image.getContents()));

Мне удалось решить большинство проблем, но этот оставил меня в неведении. Загруженное изображение имеет JCS_YCCK профиль, как определено в com.sun.imageio.plugins.jpeg.JPEG, который не поддерживается com.sun.imageio.plugins.jpeg.JPEGImageReader, Это приводит к хорошей трассировке стека, похожей на:

Caused by: javax.imageio.IIOException: Unsupported Image Type
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:910)
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:885)
    at javax.imageio.ImageIO.read(ImageIO.java:1422)
    at javax.imageio.ImageIO.read(ImageIO.java:1326)
    at com.example.ImageWriter.resizeEmbeddableImageInPlace(ImageWriter.java:231)

Как я могу обработать этот тип JPEG с помощью Java ImageIO?


Обновление: я пробовал Commons-Sanselan, обозначенный ответом, но, к сожалению, он не поддерживает файлы JPEG:

org.apache.sanselan.ImageReadException: Sanselan cannot read or write JPEG images.
    at org.apache.sanselan.formats.jpeg.JpegImageParser.getBufferedImage(JpegImageParser.java:90)
    at org.apache.sanselan.Sanselan.getBufferedImage(Sanselan.java:1264)
    at org.apache.sanselan.Sanselan.getBufferedImage(Sanselan.java:1231)

2 ответа

Решение

Одним из возможных решений является использование расширений ввода-вывода Java Advanced Imaging Image. При правильной установке конвертация происходит из коробки.

Проблема в том, что он плохо работает с Maven, поэтому я попросил использовать Java Advanced Imaging с Maven. Если это сработает, этот ответ будет принят.

Я не знаю, для ImageIO, но вы могли бы использовать библиотеку Commons Sanselan, которая предлагает простые способы доступа ко всем видам изображений.

Другие вопросы по тегам