Мне интересно, как автоматически определить максимальную скорость сжатия (небольшая размер файла + потеря качества).
На данный момент я использую imagejpeg () с $quality = 85
для каждого .jpg
.
PageSpeed (Chrome Plugin) предлагает, чтобы снизить качество нескольких изображений, чтобы сохранить некоторые килобайты. Процент сокращения отличается.
Я хотел бы написать cronjob, который сканирует конкретный каталог и оптимизирует каждое изображение.
Каким образом PageSpeed или TinyPNG определяют оптимальное качество и возможно ли это с помощью 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 (здесь онлайн-версия ).