Сжатие png изображений с помощью PngQuant

PngQuant - утилита, которая позволяет значительно ужимать размер png-изображений, сохраняя прозрачность (alpha-канал), при незначительных потерях в качестве изображений.

Размер png-изображений часто уменьшается более чем на 70%, а ужатые изображения полностью совместимы со всеми современными браузерами. При этом визуально невозможно определить где исходное, а где ужатое изображение.

Сжатие png изображений с помощью PngQuant

Достоинства PngQuant:

  1. использование алгоритмов векторной квантизации для генерации высококачественной палитры
  2. уникальный адаптивный дизеринговый алгоритм, который добавляет меньше шума, чем алгоритм Floyd-Steinberg. Применяется для уменьшения негативного эффекта от квантования.
  3. простота использования через linux shell 
  4. режим быстрой обработки большого количества изображений

Использование 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");

 

 
 
 
 

icon Комментарии 0

Ваш комментарий к статье.. (для авторизованных)

ctrl+enter

icon Вход в систему

зарегистрироваться
НОВЫЕ ПОЛЬЗОВАТЕЛИ