| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > реверс изображения при ImageIO |
| Автор: carper 17.3.2010, 17:53 | ||||
| Есть баг, описанный в http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4881314 Суть очень проста: Вот такой вот код, который просто берет картинку из одного файла и пишет ее в другой:
Не верно работает с определенными jpg файлами. А именно, при сохранении получаем картинку с "инвертированными" цветами. Предложенное в обсуждении бага решение проблемы:
Не работает для исходного файла, имеющего (по мнению JAVA) тип TYPE_3BYTE_BGR. Что интересно, попытки пересохранения исходного файла из любого вьювера, с тем же, или другим расширением, тут же решают эту проблему. При этом ни один вьювер не показал, чем же отличаются эти файлы, да и не вижу смысла искать эти различия, т.к. аналогичные файлы показываются везде (по крайней мере ни один из имеющихся у меня просмоторщиков, а также Photoshop не имели никаких проблем с отображением и сохранением этого файла) без проблем и это не единичный случай "испорченного" файла. Есть ли пути решения этой проблемы? Да, проблемный файлик с именем myimage.jpg и результат его пересохранения с именем image.jpg, в сумме на 1.3Mb можно забрать с http://ifolder.ru/16891328 http://ifolder.ru/16891318 |
| Автор: Дрон 17.3.2010, 19:05 |
| Какая версия Java используется? Я сегодня-завтра посмотрю -- бага для меня интересная так как я много занимался изображениями в Java. |
| Автор: carper 18.3.2010, 09:35 | ||||
| Версия 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 Вот кусочек заголовка "нормального" изображения:
Вот "изуродованного"
P.S. про библиотеку jai в курсе, но не хотелось бы плодить сущности без необходимости, т.к. мне в общем-то были нужны простейшие операции - типа загрузить jpeg, отмасштабировать, сохранить обратно. Да, по поводу ifolder: "Сервис iFolder приостановлен следователями 3-й ЧС ГСУ при ГУВД Москвы." Тут форум программистский и посещаемый не только мужчинами, поэтому писать, что я думаю обо всем этом воздержусь. Вот новые ссылки, возможно до этого сервиса эти еще не успеют добраться. http://www.megaupload.com/?d=YEKJX064 http://www.megaupload.com/?d=P3NETXWE |
| Автор: Дрон 18.3.2010, 09:42 |
| О, как я удачно зашёл. Скачал фотографии, ну что ж могу поздравить, моя софтина тоже её неправильно читает. Буду разбираться |
| Автор: Дрон 19.3.2010, 14:38 |
| В общем, кроме как через JAI нормально прочитать не получается. Почему -- не ясно, лезть в дебри этого файла времени нет. Но мне кажется, что проблема именно в чтении, а не в записи, потому что если читать через JAI, а сохранять через ImageIO, то всё нормально. Попробовал ещё шутки ради через Toolkit.getDefaultToolkit().createImage, но тот, похоже, вообще эту картинку прочитать не может. |
| Автор: carper 22.3.2010, 09:30 |
| Спасибо. Обидно, придется использовать JAI, а всего-то и было нужно - ресайзить картинку под аватары. :( И, таки да, похоже проблема в чтении, скорее всего где-то неверно определятся формат. |