Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Pngquant - утилита командной строки для сжатия изображений PNG в Linux

Оригинал: Pngquant – A Command-line Utility To Compress PNG Images On Linux
Автор: sk
Дата публикации: 27 августа 2019 года
Перевод: А. Кривошей
Дата перевода: декабрь 2019 г.

Pngquant - это бесплатная кроссплатформенная утилита командной строки с открытым исходным кодом для сжатия PNG с потерями. Она основана на переносимой библиотеке libimagequant и написана на C99. Она позволяет значительно уменьшить размер файла за счет преобразования изображения PNG в более эффективный 8-разрядный формат PNG и полностью сохраняет альфа-прозрачность. Как вы, возможно, уже знаете, 8-битные PNG-файлы часто на 60-80% меньше, чем 24/32-битные PNG-файлы. Изображения, сжатые с помощью Pngquant, полностью совместимы со всеми веб-браузерами и операционными системами. Pngquant может сжимать одно или несколько изображений одновременно.

Основные возможности Pngquant:

- поддержка пакетного преобразования нескольких файлов PNG;
- генерация высококачественной генерация палитры;
- использует алгоритм квантования Median Cut для оптимизации изображений;
- может быть легко интегрирована со скриптами оболочки, графическими интерфейсами и серверным программным обеспечением;
- конвертирует изображения с заданным качеством и пропускает изображения, которые нельзя конвертировать с требуемым качеством;
- поддержка многоядерности и оптимизация Intel SSE.

Установка

Pngquant может быть установлена разными способами.

Установка

Установка Pngquant из репозитория дистрибутива

Pngquant доступен в репозиториях по умолчанию большинства дистрибутивов Linux.

В Arch Linux и его вариантах Pngquant доступен в репозитории [Community]. Включите репозиторий Community и установите ее, используя Pacman, как показано ниже.

$ sudo pacman -S pngquant

В Debian, Ubuntu, Linux Mint:

$ sudo apt install pngquant

В Ubuntu и системах на его основе вам необходимо активировать репозиторий [Universe], чтобы установить Pngquant.

Активация репозитория Universe выполняется с помощью команды:

$ sudo add-apt-repository universe

В Fedora:

$ sudo dnf install pngquant

В openSUSE:

$ sudo zypper install pngquant

В CentOS:

$ sudo yum install epel-release
$ sudo yum install pngquant

Проверьте версию установленной Pngquant:

$ pngquant -V
2.5.0 (June 2015)

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

Установка Pngquant из исходного кода

Сначала установите необходимые зависимости.

В Debian, Ubuntu:

$ sudo apt install git gcc cmake libpng-dev pkg-config

В CentOS, Fedora:

$ sudo yum install git libpng-devel gcc cmake

Далее, клонируйте репозиторий git последней версии Pngquant:

$ git clone --recursive https://github.com/kornelski/pngquant.git

Приведенная выше команда загрузит содержимое репозитория Pngquant GitHub и сохранит его в папке с именем «pngquant» в вашем текущем рабочем каталоге.

Перейдите в каталог pngquant:

$ cd pngquant

Наконец, выполните следующие команды для компиляции и установки Pngquant:

$ make
$ sudo make install

Pngquant по умолчанию будет установлен в папку /usr/local/bin. Если вы хотите установить его в другой каталог, выполните команду:

$ ./configure --prefix=dir && make

Замените «dir» на ваш путь. Сначала нужно выполнить эту команду, а затем выполнить команду «sudo make install».

Проверьте версию Pngquant:

$ pngquant -V
2.12.5 (July 2019)

Установка Pngquant с помощью Cargo

Pngquant также можно установить с помощью диспетчера пакетов Cargo. Сначала установите Rust, как описано по ссылке ниже.

Install Rust Programming Language In Linux

Клонируйте репозиторий git с последней версией Pngquant:

$ git clone --recursive https://github.com/kornelski/pngquant.git

Наконец, соберите и установите Pngquant, используя Cargo, как показано ниже.

$ cd pngquant
$ sudo cargo build --release

Для других способов установки, пожалуйста, обратитесь к официальной странице установки Pngquant.

Сжатие изображений PNG в Linux с помощью Pngquant

Использование Pngquant тривиально и не требует специальных навыков.

В моем текущем каталоге у меня есть файл PNG с именем «ostechnix.png». Позвольте мне показать вам его размер.

$ du -sh ostechnix.png 
152K ostechnix.png

Как видите, размер изображения составляет 152 Кб.

Сжатие изображения PNG

Теперь давайте сожмем это изображение, используя команду:

$ pngquant ostechnix.png

Приведенная выше команда сожмет файл ostechnix.png и сохранит его как новый файл с именем «ostechnix-fs8.png». По умолчанию Pngquant будет использовать имя выходного файла, такое же, как имя входного файла с суффиксом -or8.png или -fs8.png в конце. Это означает, что исходный файл не будет перезаписан. Если вас не устраивает степень сжатия, просто удалите сжатый файл.

Давайте еще раз проверим размер сжатого файла изображения:

$ du -sh ostechnix-fs8.png 
48K ostechnix-fs8.png

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

Видите? Pngquant уменьшил размер изображения со 152К до 48К. Это действительно хорошая работа. Откройте изображение с помощью любой программы для просмотра изображений и сравните их. Вы не найдете большой разницы в качестве между оригинальным и сжатым изображениями. Оба изображения будут выглядеть почти одинаково!

Отображение сообщений о процессе во время сжатия

По умолчанию Pngquant не будет отображать то, что происходит за кулисами при сжатии изображений. Если вы хотите просмотреть сообщение о состоянии процесса, используйте следующую команду:

$ pngquant ostechnix.png --verbose
ostechnix.png:
conserving memory
read 152KB file
corrected image from gamma 2.2 to sRGB gamma
made histogram...1854 colors found
selecting colors...4%
selecting colors...25%
selecting colors...28%
selecting colors...49%
selecting colors...69%
selecting colors...90%
selecting colors...100%
moving colormap towards local minimum
eliminated opaque tRNS-chunk entries...61 entries transparent
mapped image to new colors...MSE=0.055 (Q=99)
writing 256-color image as ostechnix-fs8.png
No errors detected while quantizing 1 image.

Теперь вы увидите прогресс во время сжатия.

Сжатие нескольких изображений PNG

Pngquant также может конвертировать несколько изображений сразу. Следующая команда сжимает picture1.png и picture2.png в текущем рабочем каталоге.

$ pngquant picture1.png picture2.png

Также мы можем переместить все файлы в каталоге и сжать их за один раз. Например, чтобы преобразовать все изображения в папке с именем «/home/sk/images», выполните:

$ pngquant /home/sk/images/*.png

Изменение суффикса имени выходного файла

Как я уже сказал, имя выходного файла совпадает с именем входного, за исключением того, что оно заканчивается на «-fs8.png», «-or8.png». Однако вы можете изменить суффикс, как вы хотите.

$ pngquant ostechnix.png --ext linux.png

Эта команда сожмет файл ostechnix.png и сохранит его как ostechnixlinux.png.

Отмена сохранения файлов, если размер сжатых файлов превышает размер исходных файлов

Зачем нужно сжатие, если преобразованные файлы больше исходных файлов? Такое преобразование не нужно, поэтому мы можем пропустить его, как показано ниже.

$ pngquant --skip-if-larger ostechnix.png

Приведенная выше команда сохранит преобразованный файл, только если он меньше исходного.

Сохранение конвертированных файлов в другом месте

По умолчанию Pngquant сохраняет входные и выходные файлы изображений в одной директории. Если вы хотите сохранить выходной файл в другом месте, команда будет следующей:

$ pngquant ostechnix.png --output Documents/output.png

Эта команда сожмет ostechnix.png и сохранит его как output.png в каталоге Documents.

Сжатие изображений в нестандартном качестве

Pngquant сжимает изображения в максимально возможной степени. Мы также можем вручную установить качество изображения. Pngquant позволяет нам устанавливать качество изображения в диапазоне от 0 (наихудшее) до 100 (идеальное), используя параметры min и max.

В следующем примере минимальное качество изображения устанавливается равным 60, а максимальное - 80.

$ pngquant --quality=60-80 image.png

Если качество преобразования ниже минимального, изображение не будет сохранено.

Очистка метаданных изображения

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

How To View Image Metadata On Linux

Если у вам не нужны метаданные, вы можете просто удалить их, используя pngquant, как показано ниже.

$ pngquant --strip image.png

Для получения более подробной информации см. справочную страницу pngquant.

$ man pngquant

Я использую Pngquant уже много лет. Он очень помогает мне сжимать изображения PNG до 70% и более. Если вы ищете оптимизатор изображений PNG, Pngquant может быть хорошим выбором.