Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> реверс изображения при ImageIO, ошибочная работа с JPEG, как обойти? 
:(
    Опции темы
carper
Дата 17.3.2010, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 2.3.2005

Репутация: 1
Всего: 8



Есть баг, описанный в http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4881314

Суть очень проста:
Вот такой вот код, который просто берет картинку из одного файла и пишет ее в другой:
Код

File inFile = new File(inname);
BufferedImage  customer  = ImageIO.read(inFile);
File outFile = new File(outname);
ImageIO.write( customer , "jpg", outFile);


Не верно работает с определенными jpg файлами.
А именно, при сохранении получаем картинку с "инвертированными" цветами.

Предложенное в обсуждении бага решение проблемы:
Код

  ....
  BufferedImage image2 = 
     new BufferedImage( image.getWidth(), image.getHeight(),  BufferedImage.TYPE_INT_RGB);
     image2.getGraphics().drawImage( image, 0, 0, null );
     ImageIO.write( image2, format, file );



Не работает для исходного файла, имеющего (по мнению JAVA) тип TYPE_3BYTE_BGR.

Что интересно, попытки пересохранения исходного файла из любого вьювера, с тем же, или другим расширением, тут же решают эту проблему.

При этом ни один вьювер не показал, чем же отличаются эти файлы, да и не вижу смысла искать эти различия, т.к. аналогичные файлы показываются везде (по крайней мере ни один из имеющихся у меня просмоторщиков, а также Photoshop не имели никаких проблем с отображением и сохранением этого файла) без проблем и это не единичный случай "испорченного" файла.


Есть ли пути решения этой проблемы?


Да, проблемный файлик с именем myimage.jpg и результат его пересохранения с именем
image.jpg, в сумме на 1.3Mb можно забрать с 

http://ifolder.ru/16891328
http://ifolder.ru/16891318 



PM MAIL   Вверх
Дрон
Дата 17.3.2010, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 6
Всего: 93



Какая версия Java используется? 
Я сегодня-завтра посмотрю -- бага для меня интересная так как я много занимался изображениями в Java.


--------------------
Да. Именно так.
PM   Вверх
Дрон
Дата 17.3.2010, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 6
Всего: 93



Что-то с ifolder не могу скачать, висит он похоже.

Попробую пока так что-нибудь предложить. Например загрузить не через ImageIO, а через JAI.
Идём сюда: https://jai.dev.java.net/binary-builds.html
Скачиваем например вариант Java (no native acceleration) и добавляем в Class Path (так это вроде зовётся) своего приложения ссылки на jai_core.jar и jai_codec.jar

Тогда прочитать можно будет так:
Код
RenderedImage customer = javax.media.jai.operator.FileLoadDescriptor.create(inname, null, false, null);

А записать можно и по-старому.

Единственное отличие, что на выходе получается RenderedImage, а не BufferedImage, но это не должно быть проблемой.

Ну и ещё одно замечание -- при таком подходе из JPEG потеряется встроенный цветовой профиль (если он был, конечно), чтобы его сохранить надо ещё несколько шагов сделать. Но для начала надо с загрузкой разобраться.

Цитата(carper @  17.3.2010,  17:53 Найти цитируемый пост)
Не работает для исходного файла, имеющего (по мнению JAVA) тип TYPE_3BYTE_BGR.

Как именно не работает? Фразы вроде "не работает" это для домохозяек и бухгалтерш, программист должен чётко формулировать свою проблему smile

Это сообщение отредактировал(а) Дрон - 17.3.2010, 21:56


--------------------
Да. Именно так.
PM   Вверх
carper
Дата 18.3.2010, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 2.3.2005

Репутация: 1
Всего: 8



Версия JAVA 1.6.0_17-b04

"Как именно не работает? "
Уже описал - вновь сохраненное изображение выглядит инвертированным, также 
приложил ссылки (упс, см. окончание сообщения) по которым можно посмотреть оба изображения.

Вот инфа, АБСОЛЮТНО ОДИНАКОВАЯ для исходного и пересохраненного файлов:
1600x1068
Бит на план 24
Цветовая модель RGB (ага, для исходного тоже она)
N плана 1
Бит на пиксель 24
Сжатие JPEG
Формат JPEG TrueColor(v1.1)


А вот РАЗНАЯ из EXIF, сначала для исходного файла:

BitsPerSample        8
ColorComponenets 3
YCbCrSubSampling YCbCr4:4:4 (1 1)
EncodingProcess     Baseline DCT, Huffman coding


А теперь для пересохраненного: 

BitsPerSample        8
ColorComponenets 3
YCbCrSubSampling YCbCr4:2:0 (2 2)
JIFFVersion 1.02                                  -- Этого параметра для исходного файла нет вообще
ResolutionUnit        None                     -- Этого параметра для исходного файла нет вообще
YResolution  1                                     -- Этого параметра для исходного файла нет вообще
EncodingProcess     Baseline DCT, Huffman coding

Вот кусочек заголовка "нормального" изображения:
Код

  яШяЫ „ яА ,@ яЭ  ИяДў                 
                 
     u!" 1A2#    QBa$3RqЃb‘%CЎ±р&4r
БС5'бS6‚с’ўDTsEF7Gc(UVWІВТвтdѓt“„eЈіГУг)8fуu*9:HIJXYZghijvwxyz…†‡€‰Љ”•–—˜™љ¤Ґ¦§Ё©Єґµ¶·ё№єДЕЖЗИЙКФХЦЧШЩЪдежзийкфхцчшщъ m!1 "AQ2aqBЃ#‘RЎb3    ±$БСCrрб‚4%’ScDсўІ&5T6Ed'
sѓ“FtВТвтUeuV7„…ЈіГУгу)”¤ґДФдф•ҐµЕХех(GWf8v†


Вот "изуродованного"
Код

яШяа JFIF      яЫ C         
 
   $.' ",#(7),01444'9=82<.342яЫ C              

2!!22222222222222222222222222222222222222222222222222яА ,@" яД               
яД µ   } !1AQa"q2Ѓ‘Ў#B±БRСр$3br‚    
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzѓ„…†‡€‰Љ’“”•–—˜™љўЈ¤Ґ¦§Ё©ЄІіґµ¶·ё№єВГДЕЖЗИЙКТУФХЦЧШЩЪбв


P.S. про библиотеку jai в курсе, но не хотелось бы плодить сущности без необходимости, т.к. мне
в общем-то были нужны простейшие операции - типа загрузить jpeg, отмасштабировать, сохранить обратно.

Да, по поводу ifolder:
"Сервис iFolder приостановлен следователями 3-й ЧС ГСУ при ГУВД Москвы."

Тут форум программистский и посещаемый не только мужчинами, поэтому писать, что я думаю обо всем этом воздержусь. 

Вот новые ссылки, возможно до этого сервиса эти еще не успеют добраться.

http://www.megaupload.com/?d=YEKJX064
http://www.megaupload.com/?d=P3NETXWE 


PM MAIL   Вверх
Дрон
Дата 18.3.2010, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 6
Всего: 93



О, как я удачно зашёл.

Скачал фотографии, ну что ж могу поздравить, моя софтина тоже её неправильно читает.
Буду разбираться smile



--------------------
Да. Именно так.
PM   Вверх
Дрон
Дата 19.3.2010, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 6
Всего: 93



В общем, кроме как через JAI нормально прочитать не получается. Почему -- не ясно, лезть в дебри этого файла времени нет.
Но мне кажется, что проблема именно в чтении, а не в записи, потому что если читать через JAI, а сохранять через ImageIO, то всё нормально.

Попробовал ещё шутки ради через Toolkit.getDefaultToolkit().createImage, но тот, похоже, вообще эту картинку прочитать не может.


--------------------
Да. Именно так.
PM   Вверх
carper
Дата 22.3.2010, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 2.3.2005

Репутация: 1
Всего: 8



Спасибо.
Обидно, придется использовать JAI, а всего-то и было нужно - ресайзить картинку под аватары. :(
И, таки да, похоже проблема в чтении, скорее всего где-то неверно определятся формат.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.3467 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.