Чтение изображений 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, которая предлагает простые способы доступа ко всем видам изображений.