IllegalArgumentException: номера исходных растровых каналов и компонентов исходного цветового пространства не совпадают для цветного изображения Исключение

Приведенный выше ответ, который кто-то предложил, преобразует мое цветное изображение в черно-белое. Так что это не подходит для моего вопроса.

File file = new File("path");          
BufferedImage bufferedImage = ImageIO.read( file );

вот код и ниже изображение. Загрузите образ и сохраните его на свой компьютер. И попробуйте запустить приведенный выше код с правильным значением пути, он выдаст исключение в теме

Скачать образ: https://skydrive.live.com/?cid=19547371C4F3B839&id=19547371C4F3B839%21105

Просто, если кто-то может получить объект java.awt.image.BufferedImage из изображения, этого достаточно (не следует преобразовывать изображение в оттенки серого).

Вы гений, если можете ответить на это: D. Пожалуйста, помогите.


person Shanaka Kuruwita    schedule 21.08.2013    source источник
comment
возможный дубликат stackoverflow.com/questions/10416378/   -  person Philipp Sander    schedule 21.08.2013
comment
Привет, Филипп, пожалуйста, внимательно прочитай мой вопрос. Я четко упомянул, что не следует преобразовывать изображение в оттенки серого. Ответ, который вы предлагаете, преобразуйте мое цветное изображение в изображение в оттенках серого (черно-белое), если хотите, попробуйте и посмотрите. И не задавайте другие вопросы и не ставьте мне баллы, не попробовав. Будьте ответственны за свои комментарии.   -  person Shanaka Kuruwita    schedule 21.08.2013
comment
@PhilippSander Несмотря на то, что проблема с этим изображением похожа, она отличается от той, на которую вы ссылаетесь.   -  person Harald K    schedule 27.08.2013


Ответы (1)


Здесь нет ничего плохого в вашем коде. Я могу прочитать ваше изображение с помощью моего плагина JPEGImageReader для ImageIO. Этот считыватель изображений пытается снисходительно относиться к ошибкам JPEG и немного более эффективен, чем стандартный Java JPEGImageReader.

Однако ваш файл JPEG, похоже, имеет ряд проблем, поэтому он не может быть прочитан на 100%:

  • Во-первых, цветовой профиль ICC в изображении имеет 4 компонента цвета, в то время как данные изображения имеют только 3 компонента цвета (это вызывает исключение, которое вы видите). Основной причиной, вероятно, является плохое программное обеспечение для преобразования. Используйте ExifTool или подобное программное обеспечение, чтобы просмотреть метаданные для дальнейшего изучения. В этом случае мой читатель просто выдаст предупреждение и проигнорирует профиль ICC.
  • Во-вторых, поток JPEG заканчивается преждевременно (отсутствует EOI). Вы заметите, что в правом нижнем углу изображения есть несколько мусорных пикселей. Вы ничего не можете с этим поделать, кроме как получить исходное изображение (ну, на самом деле изображение содержит миниатюру, и миниатюра не повреждена; вы можете попытаться воссоздать данные из нее, если вам действительно нужно). Изображение, возвращенное моим ридером, соответствует изображениям, считанным родным программным обеспечением.
person Harald K    schedule 23.08.2013
comment
Привет, Харальд, большое спасибо за ответ. Теперь эта ошибка мне ясна, спасибо за объяснение. Я пытался использовать ваш плагин, но из-за отсутствия некоторых библиотек зависимостей я не смог его скомпилировать (я добавил несколько jar-файлов с двенадцатью обезьянами-изображениями). Так что не могли бы вы объяснить, как именно использовать плагин, и было бы здорово, если бы вы могли показать пример простого кода, чтобы получить буферизованное для моего изображения. - person Shanaka Kuruwita; 27.08.2013
comment
Подробности о том, как использовать плагин в Java-приложениях и контейнерах сервлетов, можно найти здесь: github.com/haraldk/TwelveMonkeys - person Sinisha Mihajlovski; 05.01.2015
comment
Работал как шарм :) - person DominikAngerer; 05.04.2015
comment
@haraldK хорошо, я узнал, что пакет libimage-exiftool-perl содержит exiftool. Итак, у меня есть изображение со значением 3 для цветовых компонентов и CMYK для данных цветового пространства. IIRC, CMYK имеет 4 цветовых компонента, и это несоответствие является причиной исключения. Это правильно? - person Carcamano; 17.02.2016
comment
Зависимость Maven: <dependency><groupId>com.twelvemonkeys.imageio</groupId><artifactId>imageio-jpeg</artifactId><version>3.3.1</version></dependency> - person Edd; 23.03.2018
comment
Есть ли какой-нибудь образец, как это использовать. Я искал образец, чтобы просто прочитать изображение с помощью двенадцати обезьян API. - person mcfly soft; 25.10.2019
comment
@mcflysoft Дело в том, что TwelveMonkeys API для чтения изображений не существует. Вы просто используете javax.imageio API, как обычно, но с плагинами TwelveMonkeys ImageIO, установленными во время выполнения. См. страницу проекта на GitHub, чтобы получить дополнительные сведения об этом и примеры, или следуйте общему руководству по ImageIO. - person Harald K; 25.10.2019