Библиотека сайта 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, как описано по ссылке ниже.
Клонируйте репозиторий git с последней версией Pngquant:
$ git clone --recursive https://github.com/kornelski/pngquant.git
Наконец, соберите и установите Pngquant, используя Cargo, как показано ниже.
$ cd pngquant $ sudo cargo build --release
Для других способов установки, пожалуйста, обратитесь к
Сжатие изображений 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
Видите? 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, дата и время изображения, заголовок и комментарии, геолокация и многое другое. Обратитесь к приведенной ниже статье, чтобы узнать, как просматривать метаданные изображения.
Если у вам не нужны метаданные, вы можете просто удалить их, используя pngquant, как показано ниже.
$ pngquant --strip image.png
Для получения более подробной информации см. справочную страницу pngquant.
$ man pngquant
Я использую Pngquant уже много лет. Он очень помогает мне сжимать изображения PNG до 70% и более. Если вы ищете оптимизатор изображений PNG, Pngquant может быть хорошим выбором.