Как определить качество картинки

RolCom

Новичок
Как определить качество картинки

Как на PHP определить качество JPEG картинки?
 

HEm

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

RolCom

Новичок
Изменить размер картинки и сохранить ее с прежним коэффициентом сжатия.
 

С.

Продвинутый новичок
И какой эзотерический смысл в сохранении коэффициента?
 

zerkms

TDD infected
Команда форума
а качество считается не от прежнего ли качества?
т.е. отресайзенная и сохранённая с 50% картинка уже с качеством 50% не будет ли ещё хуже?
 

HEm

Сетевой бобер
в общем был неправ, видимо меня ввело в заблуждение следующее:

открываю acdsee, нахожу jpg-файл, смотрю свойства
File size : 179.5 Kb
Uncompressed size : 3.8 Mb
Compression ratio : 21.4

я полагаю Uncompressed size рассчитывается как произведение ширины в пикселах на высоту в пикселах на глубину цвета (т.е. сколько весит такой bmp-файл), отсюда считается коэффициент сжатия, в какой то мере он может являться наводкой на то качество, которое было указано при сжатии картинки (в пхп или фотошопе, неважно)

насчет замечания zerkms - проверить несложно, нужно только иметь четкий глаз ;)
 

zerkms

TDD infected
Команда форума
HEm
пообщался с людьми, которые знают техническую сторону процесса сжатия. они мои опасения подтвердили. если точнее - то на уровне, на котором мы тут общаемся (обыватели) - это будет 50% от 50% :)
 

FractalizeR

Новичок
Вообще-то различные области одного и того же JPEG файла можно сжимать с разными коэффициентами. Так работают некоторые web-оптимизаторы изображений. Так что получить из файла оригинальный коэффициент сжатия невозможно. Лучше хранить его вместе с оригиналом, если он нужен.
 

dimagolov

Новичок
маразм в принципе обсуждать качество после преобразования jpeg-а. потому что jpeg теряет качество при сохранении, вернуть его нельзя НИКАК. любые преобразования, которые производятся над распакованным изображением будут работать с изображением, отличным от оригинала, с артефактами, полученными при сжатии-распаковке. и последующее сжатие только добавит артефактов и потери качества. так что или хранить оригиналы в LZW TIFF (или чем-то подобном), или не заморачиваться с качеством в принципе.
 

HEm

Сетевой бобер
dimagolov
ты предлагаешь после внесения правок сохранять без сжатия? файл то разбухнет, я полагаю

отсюда приходится как то лавировать между прежней компактностью и попыткой сохранить качество картинки, где золотая середина?
 

Wicked

Новичок
я использую у себя в проекте png (в виду работы с большими картинками (до 9000х6000), в imagemagick выставляем -quality 91, иначе на сжатие уходят _минуты_ серверного времени).

по теме: качество JPEG можно эстимировать исходя из матриц, использованных при сжатии. Подробнее можно прочитать тут: http://www.impulseadventure.com/photo/jpeg-snoop-uses.html в разделе Identifying JPEG Quality и тут: http://www.impulseadventure.com/photo/jpeg-quality.html

Я в свое время даже пытался написать 4 fun скриптик на пхп, который бы этим и занимался. За день написать не осилил и забросил :)
 

vovanium

Новичок
отресайзенная и сохранённая с 50% картинка уже с качеством 50% не будет ли ещё хуже?
Тут ключевое слово ресайз, так как при уменьшении картинки, она будет "выглядеть" лучше, чем оригинал, ведь вместе с размером уменьшится количество деталей и артефактов.
Да и проценты в jpeg весьма условны 50% качества от 50% качества, будет лучше выглядеть, чем сразу 25%.
А по теме, я бы на месте топикстартера не заморачивался, а выбрал одну степень сжатия для всех картинок которые ресайзатся, так как первоначальная степень сжатия в данном случае не важна.
 

RolCom

Новичок
Допустим, все картинки надо подогнать под определенный размер, к примеру 500 пискселей в ширину. При этом большинство отличаются по размеру не очень значительно, ~500 пикселей в ширину. Получается если мы обработаем картинку со сильным коэффициентом сжатия, картинка плохого качества плохой так и останется, а размер файла вырастет как у хорошей картинки.
В Perl модуле Image::Magick же есть такая опция, определения коэффициента сжатия, может и в PHP что-нибудь есть?
 

Wicked

Новичок
_коэффициент_сжатия_ не имеет никакого отношения к тому, что подставляется в -quality или imagejpeg()
 

С.

Продвинутый новичок
Получается если мы обработаем картинку со сильным коэффициентом сжатия, картинка плохого качества плохой так и останется, а размер файла вырастет как у хорошей картинки.
То есть если ты везде используешь коэффициент 50% и несколько картинок из 20Кб превратятся в 30Кб, то непременно упадет сервер или засрется насмерть канал?
 

RolCom

Новичок
При увеличении коэффициента до 100 размер может вырасти более 2 раз. Чем отговаривать, что это можно не делать, лучше б помог.
 

vovanium

Новичок
RolCom
Капец, нашел чем забить голову :) А нафига использовать кэф 100? Если так важно, тебе дали ссылки, как можно примерно высчитать. В самом jpeg не хранится инфа с каким кэфом его сжимали...
Самое простое делать сжатие всех до одного кэфа к примеру 40, а если фотка у тебя получилась сильно больше оригинала, делай сжатие с меньшим кэфом, или как вариант вообще говорить челу что не стоит заливать фотку с таким хреновым качеством :)
 
Сверху