PHP: Как сжимать изображения без потери видимого качества (автоматически)?

Мне интересно, как автоматически определить максимальную скорость сжатия (небольшая размер файла + потеря качества).

На данный момент я использую imagejpeg () с $quality = 85 для каждого .jpg .

PageSpeed ​​(Chrome Plugin) предлагает, чтобы снизить качество нескольких изображений, чтобы сохранить некоторые килобайты. Процент сокращения отличается.

Я хотел бы написать cronjob, который сканирует конкретный каталог и оптимизирует каждое изображение.

Каким образом PageSpeed ​​или TinyPNG определяют оптимальное качество и возможно ли это с помощью PHP или другого серверного языка?

Related of "PHP: Как сжимать изображения без потери видимого качества (автоматически)?"

TinyPNG использует pngquant .

Pngquant имеет возможность установить желаемое качество, подобное JPEG. Вы можете запустить что-то вроде:

 <?php system('pngquant --quality=85 image.png'); ?> 

На веб-сайте Pngquant приведен пример кода, показывающий, как использовать pngquant из PHP .


Для JPEG вы можете использовать jpegcrush без потерь .

JpegMini (коммерческий) и jpeg-archive (бесплатно) являются потерями и могут автоматически находить минимальное качество для JPEG.

В PHP вы можете приблизительно оценить, насколько JPEG был сжат, наблюдая, как изменяется размер файла после повторного сжатия. Размер файла JPEG, скомбинированного с одинаковым или высоким качеством, не будет сильно изменяться (но потеряет визуальное качество).

Если вы повторно сжимаете JPEG и видите размер файла в два раза, сохраните повторно сжатую версию. Если вы видите только 10-20% -ный размер файла, сохраните его.

Если вы сжимаете себя, используйте MozJPEG (здесь онлайн-версия ).