До недавнего времени я не знал, что вы можете сжимать изображения PNG в командной строке Linux. если вы являетесь пользователем Linux, ориентированным на терминалы, то эта статья для вас.
Сжатие изображений имеет решающее значение для быстрой загрузки сайта. pngquant – это утилита командной строки и библиотека для сжатия изображений PNG с потерями.
pngquant может уменьшить размер изображения PNG до 70%, сохраняя полную альфа-прозрачность.
Созданные изображения совместимы со всеми веб-браузерами и операционными системами.
Особенности pngquant
- Быстрый режим для обработки в реальном времени / большого количества изображений.
- Высококачественная генерация палитры с использованием комбинации алгоритмов векторного квантования.
- Легко интегрируется со скриптами оболочки, графическими интерфейсами и серверным программным обеспечением.
- Уникальный адаптивный алгоритм сглаживания, который добавляет меньше шума к изображениям, чем стандартный Floyd-Steinberg.
Установка pngquant в Linux
pngquant может быть установлен из вашего репозитория операционной системы или скомпилирован из исходного кода.
Преимущество сборки pngquant из исходного кода состоит в том, что вы получаете последний выпуск по сравнению с пакетами, доступными в репозитории системы.
Установите pngquant на CentOS / Fedora
Сначала установите необходимые зависимости.
sudo yum -y install git libpng-devel gcc cmake
Затем клонируйте pngquant из Git.
git clone --recursive https://github.com/kornelski/pngquant.git
Запустите ./configure и make для генерации pngquant исполняемого файла в текущем каталоге.
cd pngquant ./configure make
Если вы хотите установить его для всей системы, выполните команду:
sudo make install
Двоичный файл будет скопирован в /usr/local/bin/pngquant
$ pngquant --version 2.12.2 (November 2018)
Установите pngquant в Ubuntu / Debian
Установите необходимые зависимости
sudo apt-get update sudo apt-get install -y git gcc cmake libpng-dev pkg-config
Клонируйте pngquant
git clone --recursive https://github.com/kornelski/pngquant.git
Установите его, выполнив команды ниже
cd pngquant ./configure make sudo make instal
Установите pngquant в Arch Linux / Manjaro
Последняя версия pngquant может быть установлена на Arch Linux с помощью команды pacman.
sudo pacman -S pngquant
Использование pngquant в Linux CLI
Вы можете вывести все параметры pngquant, используя параметр –help.
$ pngquant --help
pngquant, 2.12.2 (November 2018), by Kornel Lesinski, Greg Roelofs.
Compiled with no support for color profiles. Using libpng 1.6.34.
usage: pngquant [options] [ncolors] -- pngfile [pngfile ...]
pngquant [options] [ncolors] - >stdout <stdin
options:
--force overwrite existing output files (synonym: -f)
--skip-if-larger only save converted files if they're smaller than original
--output file destination file path to use instead of --ext (synonym: -o)
--ext new.png set custom suffix/extension for output filenames
--quality min-max don't save below min, use fewer colors below max (0-100)
--speed N speed/quality trade-off. 1=slow, 4=default, 11=fast & rough
--nofs disable Floyd-Steinberg dithering
--posterize N output lower-precision color (e.g. for ARGB4444 output)
--strip remove optional metadata (default on Mac)
--verbose print status messages (synonym: -v)
Quantizes one or more 32-bit RGBA PNGs to 8-bit (or smaller) RGBA-palette.
The output filename is the same as the input name except that
it ends in "-fs8.png", "-or8.png" or your custom extension (unless the
input is stdin, in which case the quantized image will go to stdout).
If you pass the special output path "-" and a single input file, that file
will be processed and the quantized image will go to stdout.
The default behavior if the output file exists is to skip the conversion;
use --force to overwrite. See man page for full list of options.
Пример 1
В моем ноутбуке у меня есть PNG-изображение размером 3,9 МБ, которое я сожму с помощью pngquant.
$ du -sh wallpaper-01.png 3.9M wallpaper-01.png
Базовый пример сжатия изображения с помощью pngquant:
$ pngquant --force --quality=40-100 --strip --skip-if-larger \ --verbose wallpaper-01.png wallpaper-01.png: read 3893KB file used gAMA and cHRM chunks to transform image to sRGB colorspace made histogram…231676 colors found selecting colors…14% selecting colors…28% selecting colors…100% moving colormap towards local minimum eliminated opaque tRNS-chunk entries…0 entries transparent mapped image to new colors…MSE=6.201 (Q=79) writing 256-color image as wallpaper-01-fs8.png Quantized 1 image.
Проверьте размер файла назначения `
$ du -sh wallpaper-01-fs8.png 1.4M wallpaper-01-fs8.png
Вы можете увидеть размер 1,4 МБ. Это сокращение на 2,5 МБ, довольно внушительное.
Если вы хотите перезаписать исходный файл конвертированным, используйте опцию –output file.
$ pngquant --force --quality=40-100 --strip --skip-if-larger \ --verbose --output wallpaper-01.png wallpaper-01.png wallpaper-01.png: read 3893KB file used gAMA and cHRM chunks to transform image to sRGB colorspace made histogram…231676 colors found selecting colors…6% selecting colors…12% selecting colors…50% selecting colors…87% selecting colors…100% moving colormap towards local minimum eliminated opaque tRNS-chunk entries…0 entries transparent mapped image to new colors…MSE=6.111 (Q=79) writing 256-color image as wallpaper-01.png Quantized 1 image.
Проверка:
$ du -sh wallpaper-01.png 1.4M wallpaper-01.png
Пример 2: Сжатие нескольких изображений PNG
Если в вашей текущей папке у вас есть несколько изображений PNG, вы можете использовать цикл для сжатия всех элементов.
for i in *.png; do
pngquant --force --quality=40-100 --strip --skip-if-larger \
--verbose $i
done
Пример 3: Поиск всех изображений PNG в каталоге и сжатие.
Вы также можете использовать команду поиска Linux, чтобы найти все изображения PNG в указанном каталоге и сжать их, а затем встроить.
find /mysite/wp-content/uploads/ -type f -iname '*.png' -exec \ pngquant --force --quality=40-100 --skip-if-larger --strip --verbose {} --output {} \;
Замените /mysite/wp-content/uploads/ рекурсивным поиском.