У меня есть метод, который читает изображения, конвертирует их (размер, формат) и записывает их обратно.Это всегда работало очень хорошо, но теперь я наткнулся на несколько изображений JPEG (из агентства печати), которые, очевидно, содержат некоторые метаданные (IPTC).При преобразовании этих изображений все цвета неправильные.Мое первое предположение было, что это изображения CMYK, но это не так.
Проблема должна исходить от чтения, потому что не имеет значения, преобразовываю ли я изображение в меньший JPEG или PNG, всегдавыглядит так же.
Сначала я использовал ImageIO.read()
, чтобы прочитать изображение.Теперь я получаю фактическое значение ImageReader
через ImageIO.getImageReadersByMIMEType()
и пытался сказать читателю игнорировать метаданные, задав для параметра ignoreMetadata
значение ImageReader#setInput(Object input, boolean seekForwardOnly, boolean ignoreMetadata)
, но безуспешно.
Затем я создал версиюизображение без метаданных (с помощью Fireworks).Это изображение преобразуется правильно.
Единственное отличие, которое я смог выяснить, состоит в том, что для нерабочего изображения значение переменной считывателя colorSpaceCode
равно 2 , тогда как длярабочее изображение, значение 3 .Также имеется outColorSpaceCode
, равное 2 для обоих изображений.
Поскольку исходный комментарий читателя говорит только Устанавливается обратным вызовом собственного кода setImageData.Модифицированный код цветового пространства IJG + NIFTY Я действительно застрял сейчас.Поэтому любая помощь будет принята с благодарностью.
Вы можете получить оригинальное изображение (~ 3 МБ), перейдя здесь и нажав кнопку загрузки.На левом изображении ниже показано, что я получаю от исходного изображения, на правом - как оно должно выглядеть.