PngQuant - утилита, которая позволяет значительно ужимать размер png-изображений, сохраняя прозрачность (alpha-канал), при незначительных потерях в качестве изображений.
Размер png-изображений часто уменьшается более чем на 70%, а ужатые изображения полностью совместимы со всеми современными браузерами. При этом визуально невозможно определить где исходное, а где ужатое изображение.
Достоинства PngQuant:
- использование алгоритмов векторной квантизации для генерации высококачественной палитры
- уникальный адаптивный дизеринговый алгоритм, который добавляет меньше шума, чем алгоритм Floyd-Steinberg. Применяется для уменьшения негативного эффекта от квантования.
- простота использования через linux shell
- режим быстрой обработки большого количества изображений
Использование php и pngquant для сжатия png-изображений
Во-первых, нужно ставить актуальную версию pngqant.
NB: don't use version 1.0 of pngquant
Так сказано на официальном сайте pngquant. Не используйте 1.0 версию pngquant. Очень много различий в качестве и компрессии в последней версии утилиты и первой версии, которая ставится из репов во многих linux-диструбутивах.
Чтобы узнать версию pngquant, наберите в командной строке pngquant и посмотрите версию в первой строке вывода:
$ pngquant pngquant, version 1.0 of 5 April 2002, by Greg Roelofs. Compiled with libpng 1.2.46; using libpng 1.2.49. Compiled with zlib 1.2.3.4; using zlib 1.2.7.
Версию 1.0 у меня не получилось заставить работать. Версию 1.0 pngquant сразу же сносим apt-get remove pngquant. А если утилита pngquant не установлена, то не ставим её из репов.
Правильная установка pngquant
Ставим пакет libpng-dev
: apt-get install libpng-dev
Клонируем репозиторий и собираем из сорцов последнюю версию pngquant:
git clone git://github.com/pornel/pngquant.git cd pngquant ./configure make
Теперь у нас актуальная рабочая версия утилиты:
$ ./pngquant --version 2.5.2 (October 2015)
Использование pngquant
Для сжатия png-изображения выполнить в консоли:
pngquant --quality=65-80 source-image.png
При использовании php-версии pngquant с официально сайта, если у вас постоянно ошибка:
Fatal error: Uncaught exception 'Exception' with message 'Conversion to compressed PNG failed. Is pngquant 1.8+ installed on the server?
То, скорее всего, у вас установлена первая версия утилиты. В таком случае ставьте последнюю актуальную версию pngquant. Затем нужно указать правильный путь до утилиты в строке c shell_exec. Пусть до установленной утилиты PngQuant. Например:
$compressed_png_content = shell_exec("/opt/pngquant/pngquant --quality=$min_quality-$max_quality - < ".escapeshellarg($path_to_png_file));
Еще может быть добавить "2>&1" в конец команды, чтобы при наличии ошибок увидеть их в stdout.
$compressed_png_content = shell_exec("/opt/pngquant/pngquant --quality=$min_quality-$max_quality - < ".escapeshellarg($path_to_png_file)." 2>&1");
Комментарии 0