Zopflipng: консольная утилита Google для оптимизации PNG-файлов

ZopfliPNG, чаще запускаемый по имени исполняемого файла zopflipng, — это узкоспециализированная программа для оптимизации PNG-изображений. Она не редактирует картинку как графический редактор, не накладывает фильтры, не делает ретушь и не превращает PNG в новый формат. Ее задача уже: взять готовый PNG-файл и попытаться записать его компактнее, сохранив совместимость с обычными просмотрщиками, браузерами и библиотеками, которые умеют читать PNG.

Содержание

Скачать Zopflipng

Бесплатно
В реестре программного обеспечения РФ
Чистая установка

Новейшая версия для Windows и macOS. Удобный редактор с ИИ и профессиональными функциями.

⬇ Скачать ФотоМАСТЕР бесплатно

⬇ Скачать Zopflipng (Windows)

Главная идея ZopfliPNG — более плотное Deflate-сжатие внутри PNG. Сам PNG использует сжатые блоки IDAT, а zopflipng заново подбирает способ упаковки данных изображения: применяет Zopfli-сжатие, перебирает стратегии PNG-фильтров, может выбрать более подходящий color type, удаляет необязательные chunks и при необходимости меняет скрытые цвета у полностью прозрачных пикселей. Это делает программу полезной для веб-графики, интерфейсных PNG, иконок, скриншотов, ассетов сайтов и финальной подготовки статичных изображений перед публикацией.

Скриншот консольного запуска ZopfliPNG

Скриншот хорошо показывает реальный характер программы: это не окно с кнопками, а терминальный инструмент. Вся работа идет через команды, параметры и вывод в консоль. Для ZopfliPNG это нормальный формат интерфейса, потому что программа рассчитана на точную настройку и автоматизацию, а не на ручное редактирование изображения мышью.

Что такое ZopfliPNG

ZopfliPNG — командная утилита для оптимизации Portable Network Graphics, то есть PNG-файлов. Полное название программы обычно пишут как ZopfliPNG, а команда запуска — zopflipng. Это различие важно: в обзорах, документации, пакетах и статьях можно встретить оба названия, но на практике пользователь чаще работает именно с командой zopflipng.

Программа относится к классу PNG optimizer, но внутри этого класса занимает отдельное место. Она не просто запускает стандартное zlib-сжатие с высоким уровнем компрессии, а использует алгоритм Zopfli, ориентированный на получение более плотного Deflate-потока. Zopfli создавался как медленный, но эффективный компрессор Deflate/zlib/gzip: результат обычно распаковывается стандартными средствами, а дополнительная нагрузка ложится именно на этап сжатия.

В PNG это особенно логично. Формат PNG уже построен вокруг lossless-сжатия, поэтому ZopfliPNG не меняет сам формат файла. На выходе остается обычный .png, который открывается в браузере, графическом редакторе, CMS, мобильном приложении или системном просмотрщике. Пользователь получает не специальный закрытый файл, а стандартный PNG с более тщательно упакованными данными.

ZopfliPNG особенно хорошо вписывается в рабочие процессы, где изображение уже подготовлено, но его нужно уменьшить перед публикацией. Это не программа для творчества, а программа для финальной технической доводки файла.

Главное назначение программы

ZopfliPNG нужен там, где PNG уже выбран как формат, а задача состоит в уменьшении веса файла без визуальной потери качества. Программа особенно полезна для изображений, которые редко меняются, но много раз загружаются пользователями.

Типичные сценарии:

  • PNG-иконки интерфейса;

  • логотипы с прозрачностью;

  • скриншоты программ;

  • элементы UI;

  • декоративные изображения сайта;

  • изображения в темах WordPress и шаблонах сайтов;

  • ассеты фронтенд-проектов;

  • статичные PNG в документации;

  • графика для приложений, где важен каждый килобайт;

  • изображения, которые попадают в build pipeline;

  • игровые 2D-ассеты;

  • спрайты;

  • небольшие схемы с четкими цветами;

  • изображения, где нельзя перейти на WebP или AVIF.

Важная особенность: ZopfliPNG лучше воспринимать как инструмент финальной упаковки. Его не стоит запускать после каждого сохранения макета, потому что программа может работать заметно медленнее простых PNG-оптимизаторов. Зато она уместна на финальном этапе: когда изображение уже готово, проверено и больше не требует визуального редактирования.

Чем ZopfliPNG отличается от обычного сжатия PNG

Обычное сохранение PNG в редакторе часто делает только базовую упаковку изображения. Файл получается корректным, но не обязательно минимальным. ZopfliPNG работает глубже: он анализирует структуру PNG и пытается записать изображение компактнее, не заставляя пользователя менять формат.

МеханизмЧто делает ZopfliPNGПрактический эффект
Deflate-сжатиеПерепаковывает данные через ZopfliPNG может стать меньше без смены формата
PNG-фильтрыПробует разные стратегии фильтрации строкИногда дает заметный выигрыш на скриншотах и UI-графике
Color typeМожет подобрать более компактное представление цветаНапример, не хранить лишние каналы, если они не нужны
Ancillary chunksУдаляет необязательную служебную информациюУменьшает файл, но требует внимания к gamma, DPI и ICC
ПрозрачностьМожет очистить скрытые цвета под полной прозрачностьюВизуально картинка не меняется, но исчезают скрытые данные
16-bit → 8-bitМожет перевести 16-битные каналы в 8-битныеУменьшает размер, но это уже не строго lossless по данным

Программа аккуратно работает с критическими PNG-блоками, без которых файл не будет нормальным PNG. По умолчанию сохраняются и при необходимости без потерь изменяются основные chunks: IHDR, PLTE, tRNS, IDAT, IEND. Остальные chunks, например текстовые комментарии, gamma, DPI или цветовые профили, могут быть удалены, если пользователь явно не попросит их сохранить через --keepchunks.

Интерфейс программы

У ZopfliPNG нет графического интерфейса. Нет кнопок Открыть, Сжать, Сохранить как, панели предпросмотра и окна настроек. Интерфейс программы — это командная строка.

Базовая схема работы выглядит так:

zopflipng [options]... infile.png outfile.png

Для обработки нескольких файлов используется режим с префиксом:

zopflipng [options]... --prefix=[fileprefix] [files.png]...

Именно так программа устроена: сначала пишется команда zopflipng, затем параметры, затем входной PNG и имя выходного PNG. При пакетной обработке вместо одного выходного имени задается --prefix, а выходные файлы получают добавку к имени.

Что пользователь видит в консоли

При запуске ZopfliPNG выводит информацию о ходе оптимизации. Обычно в консоли видны:

  • имя оптимизируемого файла;

  • выбранные или перебираемые filter strategies;

  • размер результата для отдельных стратегий;

  • исходный размер;

  • итоговый размер;

  • процент от исходного файла;

  • сообщение Result is smaller, если результат стал меньше;

  • сообщение о сохранении оригинала, если новая версия больше.

Типичный вывод выглядит примерно так:

Optimizing image.pngInput size: 130432 (127K)Result size: 105074 (102K). Percentage of original: 80.558%Result is smaller

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

Что программа умеет делать

ZopfliPNG не перегружен функциями, но каждая функция относится именно к задаче PNG-оптимизации.

Сжатие одного PNG-файла

Базовая задача — взять один файл и создать уменьшенную копию:

zopflipng input.png output.png

Программа читает input.png, оптимизирует его и записывает результат в output.png. Если выходной файл уже существует и оказался меньше результата нового запуска, ZopfliPNG рассматривает его как более удачный результат предыдущей оптимизации и не перезаписывает более крупной версией. Это поведение полезно при повторных экспериментах с настройками.

Более сильное сжатие через -m

Параметр -m включает режим compress more:

zopflipng -m input.png output.png

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

Пакетная оптимизация через --prefix

Для нескольких файлов используется --prefix:

zopflipng --prefix=optimized_ icon.png logo.png screenshot.png

После такой команды программа создаст файлы с префиксом:

optimized_icon.pngoptimized_logo.pngoptimized_screenshot.png

Если написать --prefix без значения, используется стандартный префикс zopfli_. Это удобно при обработке папки через wildcard:

zopflipng --prefix=zopfli_ *.png

Преимущество такого подхода — безопасность. Исходники остаются на месте, а оптимизированные копии создаются рядом. Для контент-менеджера, верстальщика или владельца сайта это лучше, чем сразу перезаписывать оригиналы.

Dry run через -d

Параметр -d запускает dry run:

zopflipng -d input.png output.png

В этом режиме программа не сохраняет файлы, а только показывает консольный вывод. Это полезно для тестирования, бенчмарков и сравнения настроек. Можно понять, даст ли конкретная комбинация параметров выигрыш, не создавая лишних файлов.

Автоматическое согласие на перезапись через -y

Параметр -y отключает вопросы о перезаписи:

zopflipng -y input.png output.png

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

Сохранение служебных chunks через --keepchunks

По умолчанию ZopfliPNG удаляет необязательную метаинформацию. Это хорошо для веса файла, но не всегда хорошо для точности отображения и печатных параметров. Чтобы сохранить конкретные PNG-chunks, используется --keepchunks:

zopflipng --keepchunks=gAMA,pHYs input.png output.png

Такой запуск сохраняет gamma и DPI-информацию. Для изображений, где важны цветовой профиль, гамма-коррекция или физическое разрешение, это критичный параметр. Формат записи строгий: имена chunks идут через запятую, например gAMA,cHRM,sRGB,iCCP.

Сохранение исходного color type через --keepcolortype

ZopfliPNG может менять color type PNG, если это дает более компактную запись без визуальной потери. Например, если изображение фактически серое, ему не обязательно храниться как полноценный RGBA. Но иногда исходный color type нужно оставить: для совместимости с конкретным устройством, старым движком, нестандартным пайплайном или строгими требованиями к ассетам.

Для этого есть параметр:

zopflipng --keepcolortype input.png output.png

Он сохраняет исходный тип цвета и битовую глубину PNG. Цена — потеря части возможностей для дополнительного сжатия.

Основные параметры ZopfliPNG

-m

-m — самый простой способ попросить программу сжать сильнее. Он не требует разбираться в фильтрах и chunks. Команда:

zopflipng -m image.png image.optimized.png

Подходит для финальной подготовки файлов, когда важен размер, а время обработки не критично. Для больших скриншотов, PNG с прозрачностью и сложной UI-графики разница может быть заметной, но универсальной гарантии нет: иногда обычный запуск уже дает почти тот же результат.

--iterations=[number]

Параметр задает количество итераций Zopfli:

zopflipng --iterations=50 input.png output.png

Чем больше итераций, тем дольше обработка. Результат может стать чуть меньше, но после определенного уровня улучшение обычно становится минимальным. Практический смысл такой:

ЗначениеКогда использовать
5–15обычная оптимизация, быстрые проверки
30–50финальная оптимизация важных файлов
100+редкие случаи, когда важен каждый байт
500тесты, соревнование за минимальный размер, не повседневная работа

Для обычного сайта нет смысла ставить --iterations=500 на всю папку изображений. Это может занять много времени, а выигрыш относительно умеренных настроек окажется небольшим. Больше итераций делает обработку медленнее и иногда дает дополнительное, но обычно небольшое улучшение.

--filters=[types]

PNG-фильтры — один из важных механизмов сжатия. Перед Deflate-сжатием каждая строка изображения может быть предварительно преобразована одним из фильтров. Иногда правильно выбранный фильтр резко облегчает дальнейшее сжатие.

ZopfliPNG умеет пробовать такие стратегии:

ОбозначениеЗначение
0всем scanlines задается PNG filter type 0
1всем scanlines задается PNG filter type 1
2всем scanlines задается PNG filter type 2
3всем scanlines задается PNG filter type 3
4всем scanlines задается PNG filter type 4
mminimum sum
eentropy
ppredefined, то есть сохранение фильтров из исходного PNG
bbrute force, экспериментальный режим

Практичная команда:

zopflipng --filters=0me input.png output.png

Комбинация 0me часто рассматривается как хороший набор для пробы. Более агрессивный вариант:

zopflipng --iterations=100 --filters=01234mepb input.png output.png

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

--lossy_transparent

Параметр:

zopflipng --lossy_transparent input.png output.png

Он удаляет цвета за полностью прозрачными пикселями, где alpha равна 0. Визуально изображение не меняется, потому что эти пиксели полностью невидимы. Но технически данные меняются: скрытая информация под прозрачностью исчезает.

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

--lossy_8bit

Параметр:

zopflipng --lossy_8bit input.png output.png

Он переводит изображение с 16 бит на канал в 8 бит на канал. Это может значительно уменьшить размер, но уже не является строгим lossless-преобразованием по данным изображения. Для обычной веб-графики 8 бит на канал часто достаточно, но для медицинских, научных, печатных, HDR-подобных или технических изображений такой параметр использовать нельзя без проверки.

--always_zopflify

Параметр:

zopflipng --always_zopflify input.png output.png

Он заставляет программу сохранить результат Zopfli даже тогда, когда он больше исходного файла. Это режим для бенчмарков и анализа алгоритма, а не для нормальной оптимизации. В повседневной работе параметр почти не нужен.

-q

Параметр:

zopflipng -q input.png output.png

-q включает быстрый, но не лучший режим компрессии. Он нужен для ускоренной проверки PNG-фильтров и color type, но не для получения минимального размера. Для финальной подготовки ассетов лучше использовать обычный режим или -m.

--splitting=[0-3]

Этот параметр оставлен для обратной совместимости и игнорируется. Использовать его в новых командах смысла нет.

Практическая инструкция: как сжать один PNG

Рабочий сценарий для одного файла выглядит так.

Шаг 1. Подготовить исходник

Допустим, есть файл:

logo.png

Лучше не оптимизировать единственный экземпляр без копии. Безопаснее создать новый файл:

zopflipng logo.png logo.optimized.png

Шаг 2. Посмотреть результат в консоли

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

Result is smaller

Если новый PNG получился больше, ZopfliPNG сохранит более выгодный вариант или предупредит, что исходник меньше. Это важное поведение: программа не пытается любой ценой заменить файл более крупной версией.

Шаг 3. Проверить изображение глазами

Для обычного lossless-запуска картинка должна выглядеть так же. Но если программа удалила chunks, теоретически может измениться интерпретация gamma, DPI или цветового профиля в конкретном приложении. Поэтому после оптимизации логотипа, скриншота интерфейса или графики с точными фирменными цветами нужно открыть файл в целевом окружении: браузере, CMS, мобильном приложении, редакторе или просмотрщике.

Шаг 4. При необходимости сохранить chunks

Если после оптимизации важны gamma и DPI:

zopflipng --keepchunks=gAMA,pHYs logo.png logo.optimized.png

Если нужен цветовой профиль:

zopflipng --keepchunks=sRGB,iCCP,gAMA,cHRM logo.png logo.optimized.png

Чем больше chunks сохраняется, тем меньше потенциальный выигрыш по размеру. Это нормальный компромисс между минимальным весом и сохранением служебной информации.

Практическая инструкция: пакетная оптимизация папки

Для папки с PNG лучше не перезаписывать оригиналы сразу. Безопасный вариант:

zopflipng --prefix=opt_ *.png

Если в папке лежат:

icon.pnglogo.pngscreen.png

на выходе появятся:

opt_icon.pngopt_logo.pngopt_screen.png

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

Пакетная обработка с усиленным сжатием

zopflipng -m --prefix=opt_ *.png

Это разумный вариант для финальной обработки небольшого набора изображений. Для сотен и тысяч PNG лучше сначала сделать тест на части файлов, потому что -m может заметно увеличить время.

Пакетная обработка с сохранением gamma и DPI

zopflipng --keepchunks=gAMA,pHYs --prefix=opt_ *.png

Команда полезна для изображений, где физическое разрешение или гамма-коррекция не должны исчезнуть. Для обычных декоративных PNG на сайте эти chunks часто не нужны, но для документации, печатных материалов и изображений с контролируемым отображением лучше не удалять их автоматически.

Как работает ZopfliPNG внутри

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

Упрощенно процесс выглядит так:

  1. программа читает PNG;

  2. декодирует данные изображения;

  3. анализирует color type и битовую глубину;

  4. пробует стратегии PNG-фильтрации;

  5. заново сжимает данные через Zopfli;

  6. удаляет необязательные chunks, если пользователь не попросил их сохранить;

  7. сравнивает размер результата с исходником;

  8. записывает итоговый PNG, если результат имеет смысл.

ZopfliPNG не делает магии с качеством изображения. Он не улучшает резкость, не дорисовывает детали, не чистит шум. Его работа — структурная и компрессионная. Программа пытается записать те же данные компактнее.

Почему ZopfliPNG может быть медленным

Высокое сжатие Zopfli достигается ценой времени. Алгоритм тратит больше CPU-ресурсов на поиск более выгодного представления Deflate-потока. Для небольших иконок это может быть незаметно, но для крупных скриншотов, больших PNG с прозрачностью или массовой обработки папки разница становится очевидной.

Несколько процессов zopflipng в Activity Monitor при обработке PNG через ImageOptim

На скриншоте видны несколько процессов zopflipng, активно загружающих CPU. Это характерная особенность инструмента: он рассчитан не на мгновенную интерактивную работу, а на финальную офлайн-оптимизацию. Даже при использовании через сторонние оболочки фактическую работу выполняет тот же консольный процесс.

Для сайта или приложения это нормальная модель: один раз потратить больше времени на подготовку ассетов, а затем многократно отдавать пользователям более легкие файлы. Но для сценария пересохранять картинку каждые 10 секунд ZopfliPNG неудобен.

Работа с прозрачностью

PNG часто выбирают именно из-за прозрачности. Логотипы, иконки, кнопки, интерфейсные элементы и декоративные иллюстрации обычно используют alpha-канал. ZopfliPNG умеет работать с такими файлами без визуальной потери качества.

Особенно интересен параметр:

zopflipng --lossy_transparent input.png output.png

У PNG с прозрачностью бывают пиксели, которые полностью невидимы, но все равно хранят RGB-значения. Например, под прозрачной областью может лежать старый цвет, фрагмент фона или техническая информация, оставшаяся после экспорта. Для отображения в браузере эти цвета не нужны: alpha равна 0, значит пиксель полностью прозрачен.

--lossy_transparent очищает такие скрытые цвета. В результате Deflate-сжатию проще найти повторяющиеся данные, и файл может стать меньше. Визуально картинка остается такой же, но с точки зрения исходных данных это уже изменение.

Когда --lossy_transparent уместен

Параметр хорошо подходит для:

  • иконок сайта;

  • PNG-кнопок;

  • логотипов с прозрачным фоном;

  • декоративных элементов интерфейса;

  • скриншотов с прозрачными областями;

  • игровых UI-ассетов, если движок не использует скрытый RGB под alpha 0.

Когда его лучше не использовать

Параметр лучше не применять, если:

  • прозрачные пиксели несут техническую информацию;

  • PNG используется в нестандартном графическом пайплайне;

  • изображение потом снова редактируется как исходник;

  • файл участвует в автоматической генерации масок;

  • требуется побайтовая сохранность исходных RGBA-данных.

Для сайта почти всегда важен визуальный результат. Для исходников дизайна важны данные. Поэтому --lossy_transparent лучше считать настройкой для финального экспортного PNG, а не для мастер-файла.

Работа с 16-битными PNG

ZopfliPNG умеет преобразовать 16-битное изображение в 8-битное через --lossy_8bit:

zopflipng --lossy_8bit input.png output.png

Это может дать сильное уменьшение размера, потому что количество данных на канал сокращается. Но такой режим меняет глубину цвета. Для обычной веб-графики это может быть приемлемо, а для технических изображений — нет.

Тип изображенияМожно ли использовать --lossy_8bit
Иконка сайтаобычно да, после визуальной проверки
Скриншот интерфейсаобычно да, если нет требований к 16 битам
Логотипосторожно, проверять градиенты и цвет
Фотография в PNGчаще лучше выбрать другой формат
Медицинское изображениенет
Научная визуализациянет без согласования
Печатный оригиналнет, если важна глубина цвета

Название параметра начинается с lossy не случайно. Это не просто лучшее сжатие, а изменение данных изображения.

Работа с метаданными и color management

Одна из самых важных особенностей ZopfliPNG — удаление ancillary chunks. Для веб-иконок это часто хорошо: текстовые комментарии, редакторские метки, лишние профили и DPI могут только увеличивать размер. Но в ряде случаев chunks нужны.

Примеры chunks, которые могут иметь значение:

ChunkЧто может хранить
gAMAgamma-информацию
pHYsфизическое разрешение, DPI-подобные данные
sRGBуказание на sRGB
iCCPICC-профиль
cHRMchromaticity
tEXtтекстовые метаданные
zTXtсжатые текстовые метаданные
iTXtмеждународный текст

Если важна точная передача цвета, можно использовать:

zopflipng --keepchunks=sRGB,iCCP,gAMA,cHRM input.png output.png

Если нужно сохранить DPI:

zopflipng --keepchunks=pHYs input.png output.png

Если нужно сохранить комментарии:

zopflipng --keepchunks=tEXt,zTXt,iTXt input.png output.png

Сохранение chunks увеличивает результат. Это не ошибка, а нормальная цена за метаданные. ZopfliPNG по умолчанию ориентирован на типичное веб-использование, где лишняя служебная информация часто не нужна.

Типовые команды для разных задач

ЗадачаКомандаКомментарий
Сжать один PNGzopflipng input.png output.pngбазовый безопасный вариант
Сжать сильнееzopflipng -m input.png output.pngмедленнее, но может дать меньший файл
Проверить без сохраненияzopflipng -d input.png output.pngудобно для тестов
Пакетная обработкаzopflipng --prefix=opt_ *.pngсоздает копии с префиксом
Сохранить gamma и DPIzopflipng --keepchunks=gAMA,pHYs input.png output.pngполезно для точного отображения
Очистить скрытые цвета под прозрачностьюzopflipng --lossy_transparent input.png output.pngвизуально без изменений, но данные меняются
Перебрать полезные фильтрыzopflipng --filters=0me input.png output.pngпрактичный набор
Максимально агрессивный тестzopflipng --iterations=500 --filters=01234mepb --lossy_8bit --lossy_transparent input.png output.pngне для повседневной обработки

Пример рабочего сценария для сайта

Допустим, есть папка:

/assets/img/

В ней лежат PNG-иконки, логотипы и скриншоты. Логика подготовки может быть такой:

  1. сохранить исходники отдельно;

  2. скопировать экспортные PNG в рабочую папку;

  3. запустить ZopfliPNG с префиксом;

  4. проверить размер;

  5. открыть важные изображения в браузере;

  6. заменить только те файлы, где результат стал меньше;

  7. не применять lossy-параметры к файлам, которые потом будут редактироваться.

Команда для первого прохода:

zopflipng --prefix=opt_ *.png

Команда для более сильной финальной упаковки:

zopflipng -m --filters=0me --prefix=opt_ *.png

Команда для логотипов с сохранением цветовой информации:

zopflipng -m --filters=0me --keepchunks=sRGB,iCCP,gAMA,cHRM --prefix=opt_ *.png

Для обычных декоративных элементов можно быть агрессивнее:

zopflipng -m --lossy_transparent --prefix=opt_ *.png

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

ZopfliPNG в автоматизации

CLI-формат делает программу удобной для автоматизации. Ее можно использовать в shell-скриптах, npm scripts, CI/CD, задачах сборки сайта и локальных пайплайнах подготовки ассетов.

Простой shell-подход:

for file in *.png; do  zopflipng -m "$file" "opt_$file"done

Более осторожный подход:

mkdir -p optimizedfor file in *.png; do  zopflipng -m "$file" "optimized/$file"done

Для Windows PowerShell:

New-Item -ItemType Directory -Force optimizedGet-ChildItem *.png | ForEach-Object {  zopflipng -m $_.FullName "optimized$($_.Name)"}

Для проекта, где PNG меняются редко, ZopfliPNG можно запускать только перед релизом. Это снижает нагрузку на разработчика: во время работы используются быстрые обычные экспорты, а перед публикацией ассеты проходят тяжелую финальную оптимизацию.

Что ZopfliPNG не делает

ZopfliPNG важно не переоценивать. Это не универсальная программа для изображений, а точный инструмент для одной задачи.

Программа не делает:

  • обрезку изображения;

  • изменение размера;

  • поворот;

  • коррекцию цвета;

  • ретушь;

  • удаление фона;

  • добавление водяных знаков;

  • конвертацию JPEG в PNG;

  • экспорт WebP или AVIF;

  • сравнение визуального качества;

  • просмотр результата в окне;

  • пакетную сортировку изображений по папкам;

  • работу с PSD, SVG, HEIC, RAW как с редакторскими форматами.

Если нужно изменить размер, сначала используется графический редактор или конвертер. Если нужно получить современный веб-формат, берется WebP/AVIF-инструмент. Если нужно именно сжать готовый PNG без смены формата, тогда ZopfliPNG уместен.

Качество результата

При обычных настройках ZopfliPNG сохраняет визуальное качество PNG. Это lossless-оптимизация в практическом смысле: пиксели отображаются так же, формат остается PNG, а браузеру не нужен новый декодер.

Но есть три оговорки:

  1. удаление chunks может повлиять на интерпретацию цвета или DPI;

  2. --lossy_transparent меняет скрытые RGB-данные под полной прозрачностью;

  3. --lossy_8bit меняет глубину цвета.

Поэтому корректная практика такая: отдельно хранить исходники, отдельно оптимизировать экспортные PNG, а затем проверять важные изображения в целевом окружении.

История версий программы

Zopfli появился как проект Google для более плотного Deflate/zlib/gzip-сжатия. Первая публичная волна интереса к алгоритму пришлась на 2013 год: Zopfli предлагал получить меньший Deflate-совместимый результат ценой более долгой компрессии. Для PNG это было особенно интересно, потому что PNG использует Deflate внутри IDAT-данных.

ZopfliPNG вошел в экосистему Zopfli как отдельная PNG-утилита. В мае 2013 года ZopfliPNG был принят в репозиторий Zopfli; программа получила роль специализированного оптимизатора PNG, работающего поверх Zopfli-сжатия и PNG-фильтров.

В истории релизов проекта выделяются версии zopfli-1.0.1, zopfli-1.0.2 и zopfli-1.0.3. В этих версиях важны не внешние изменения интерфейса, а стабилизация алгоритма, сборки, поведения командной строки и совместимости с рабочими пайплайнами.

ПериодЧто важно для ZopfliPNG
2013Zopfli получает публичное внимание как Deflate-совместимый компрессор с упором на плотность
2013ZopfliPNG закрепляется как PNG-оптимизатор в экосистеме Zopfli
1.0.1Релизная линия Zopfli уже включает отдельные версии проекта
1.0.2Продолжение стабилизации и обновления сборочной инфраструктуры
1.0.3Закрепленная релизная версия, встречающаяся в пакетах и man pages

История ZopfliPNG не похожа на историю массового графического редактора с ежегодными большими релизами и изменением интерфейса. У программы нет ленты функций в стиле добавили кнопку, изменили панель, перерисовали окно. Это консольная утилита, где развитие выражается в алгоритмах, совместимости, сборке, параметрах и интеграции в другие пайплайны.

Zopflipng

Этот тип иллюстрации подходит для ZopfliPNG лучше, чем искусственные окна программы: утилита живет в командной строке, исходниках, man pages, скриптах сборки и автоматизированных сценариях.

Сравнение с аналогами

ZopfliPNG нужно сравнивать не с графическими редакторами, а с реальными PNG-оптимизаторами. У каждого инструмента своя логика: одни быстрее, другие удобнее, третьи сильнее уменьшают размер ценой потерь, четвертые лучше подходят для массовой обработки.

ПрограммаТипСильные стороныОграничения
OptiPNGCLI, losslessпростая работа, быстрая оптимизация, проверка и исправление PNGобычно менее агрессивен по Deflate-плотности
pngcrushCLI, lossless/модификация chunksмного настроек, работа с IDAT и ancillary chunksменее дружелюбен для новичка
OxipngCLI/library, losslessмногопоточность, высокая скорость, современная реализация на Rustпри максимальных режимах тоже требует времени
pngquantCLI/library, lossyочень сильное уменьшение PNG за счет палитры, поддержка alphaменяет изображение, не strict lossless
PNGOUTCLI/GUI-экосистема, losslessсильное PNG-сжатие, исторически известный оптимизаторменее удобен в открытых автоматизированных пайплайнах
ImageOptimGUI для macOSудобная drag-and-drop обработка, использует несколько оптимизаторовменьше контроля над отдельными параметрами
Squooshвеб-интерфейсудобно вручную сравнивать форматы и качествоне заменяет CLI-пайплайн для автоматизации

OptiPNG — хороший выбор, когда нужен надежный и понятный PNG optimizer без сложной настройки. Он умеет уменьшать PNG без потери информации, выполнять проверки целостности, исправления и вспомогательные операции. Для больших папок и регулярной обработки OptiPNG часто проще и быстрее.

pngcrush — более технический инструмент. Он ориентирован на уменьшение IDAT stream и может работать с ancillary chunks: удалять ненужные или добавлять нужные, включая gAMA, tRNS, iCCP и текстовые chunks. Он подходит тем, кто понимает структуру PNG и хочет управлять деталями.

Oxipng — современный lossless-оптимизатор PNG/APNG, написанный на Rust. Его сильная сторона — многопоточность и хорошая скорость при массовой обработке. Для проектов с большим количеством PNG он часто удобнее как повседневный инструмент, особенно если нужно быстро прогнать папку ассетов.

pngquant принципиально отличается: это lossy PNG compressor. Он уменьшает размер через преобразование в более компактный 8-битный PNG с alpha-каналом и может давать очень большой выигрыш, часто намного больше, чем strict lossless-инструменты. Но это уже не сохранение исходных данных пиксель в пиксель. Для иллюстраций, UI и веб-графики pngquant часто полезен, но для строгих исходников и технических изображений его нужно применять осторожно.

ZopfliPNG выигрывает там, где нужен именно стандартный PNG, где нельзя переходить на WebP/AVIF, где нежелательна палитровая потеря качества и где можно позволить медленную финальную оптимизацию. Он проигрывает там, где важна скорость, массовая ежедневная обработка или удобный визуальный интерфейс.

Преимущества ZopfliPNG

Высокая плотность сжатия

Главное преимущество — способность выжимать дополнительные проценты из PNG за счет Zopfli. На отдельных файлах это может быть скромно, на других — заметно. Важнее другое: результат остается обычным PNG, а значит не требует от пользователя перехода на новый формат.

Удобство для автоматизации

CLI-формат позволяет включить ZopfliPNG в скрипты, сборки, релизы и серверные процессы. Команда не требует GUI, не зависит от ручных кликов и может быть частью повторяемого пайплайна.

Гибкие параметры

Пользователь может управлять:

  • числом итераций;

  • фильтрами;

  • сохранением chunks;

  • очисткой скрытых прозрачных данных;

  • сохранением color type;

  • режимом dry run;

  • пакетной обработкой через prefix.

Безопасное сравнение размеров

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

Подходит для финальной веб-оптимизации

Для сайтов, где PNG уже выбран по техническим причинам, ZopfliPNG помогает уменьшить вес ассетов без перехода на другой формат. Это особенно полезно для иконок, логотипов, декоративных элементов и скриншотов.

Недостатки ZopfliPNG

Низкая скорость

Главный минус — время. ZopfliPNG может быть значительно медленнее обычных оптимизаторов. Это не ошибка реализации, а следствие подхода: программа тратит CPU-время на более тщательный поиск компактного представления.

Нет графического интерфейса

Для пользователя, привыкшего к кнопкам и drag-and-drop, zopflipng неудобен. Нужно открыть терминал, написать команду, понять параметры и оценить результат по консольному выводу.

Нужно понимать chunks

Удаление metadata chunks полезно для размера, но может быть нежелательным для цвета, DPI и служебной информации. Пользователь должен знать, когда применять --keepchunks.

Не всегда дает выигрыш

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

Не заменяет современные форматы

Для фотографий и крупных изображений часто выгоднее WebP, AVIF или JPEG. ZopfliPNG нужен именно тогда, когда требуется оставить PNG.

Оптимальные настройки по сценариям

Для иконок сайта

zopflipng -m --lossy_transparent icon.png icon.opt.png

Иконки часто имеют прозрачный фон, поэтому --lossy_transparent может быть полезен. Если это финальный экспорт, а не исходник для редактирования, режим обычно оправдан.

Для логотипа

zopflipng -m --keepchunks=sRGB,iCCP,gAMA,cHRM logo.png logo.opt.png

У логотипа важны цвета, поэтому лучше сохранить цветовые chunks. Если файл предназначен только для веба и уже проверен в браузере, набор chunks можно сократить.

Для скриншотов интерфейса

zopflipng -m --filters=0me screenshot.png screenshot.opt.png

Скриншоты часто хорошо сжимаются за счет повторяющихся областей, ровных цветов и UI-структуры. Перебор фильтров может дать дополнительный выигрыш.

Для папки ассетов

zopflipng -m --prefix=opt_ *.png

Это удобный стартовый вариант. После выполнения можно сравнить размеры и заменить только удачные файлы.

Для тестирования максимального сжатия

zopflipng --iterations=100 --filters=01234mepb input.png output.png

Такой режим лучше применять точечно. Он не должен быть стандартом для каждой картинки.

Частые ошибки при работе с ZopfliPNG

Перезапись оригиналов без копии

Самая неприятная ошибка — запускать оптимизацию прямо поверх исходников. Даже если программа работает аккуратно, исходник лучше хранить отдельно. Особенно если используются --lossy_transparent или --lossy_8bit.

Ожидание мгновенной обработки

ZopfliPNG может быть медленным. Если пользователь запускает -m, --iterations=500 и --filters=01234mepb на большой папке, долгий процесс — ожидаемое поведение.

Использование --lossy_8bit без проверки

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

Удаление chunks в чувствительных файлах

Если важны gamma, DPI, ICC-профиль или текстовые метаданные, нужно использовать --keepchunks.

Сравнение только по одному PNG

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

Использование PNG для всего подряд

ZopfliPNG не исправляет ошибочный выбор формата. Если картинка является фотографией, PNG часто будет тяжелее JPEG/WebP/AVIF даже после хорошей оптимизации.

ZopfliPNG для WordPress и CMS

Для WordPress, DLE, Joomla, Laravel-сайтов и других CMS ZopfliPNG полезен как инструмент подготовки файлов до загрузки на сайт. Особенно это относится к изображениям темы, шаблона, интерфейса и статичных страниц.

Практичный подход:

  • экспортировать PNG из редактора;

  • сохранить исходник отдельно;

  • прогнать файл через ZopfliPNG;

  • проверить отображение;

  • загрузить уже оптимизированный PNG в CMS.

Для медиа-библиотеки с большим количеством пользовательских фотографий ZopfliPNG не лучший основной инструмент. Фотографии лучше обрабатывать через JPEG/WebP/AVIF. PNG стоит оставлять для графики с прозрачностью, скриншотов, схем, интерфейсных элементов и изображений с четкими краями.

ZopfliPNG для разработчика

Для разработчика сильная сторона программы — предсказуемость. Команда фиксируется в скрипте, параметры хранятся в репозитории, результат можно повторить. Например:

{  "scripts": {    "optimize:png": "zopflipng -m --prefix=opt_ assets/*.png"  }}

В CI/CD ZopfliPNG можно использовать на этапе сборки релизных ассетов. Но не стоит запускать его на каждом коммите для всей папки изображений, если PNG много. Лучше разделить быстрые проверки и финальную тяжелую оптимизацию.

ZopfliPNG для дизайнера

Дизайнеру важно понимать: ZopfliPNG не заменяет Figma, Photoshop, Illustrator, Affinity Designer или другой редактор. Он вступает в работу после экспорта. Сначала изображение готовится визуально, затем экспортируется в PNG, и только потом оптимизируется.

Правильная схема:

  1. редактировать исходник в дизайнерской программе;

  2. экспортировать PNG;

  3. сохранить экспортный PNG как отдельный файл;

  4. оптимизировать через zopflipng;

  5. проверить результат;

  6. передать оптимизированный файл в верстку или CMS.

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

ZopfliPNG для технического SEO

Для технического SEO ZopfliPNG интересен как способ уменьшить вес статичных PNG без смены URL и формата. Это может быть полезно, если на сайте много PNG-иконок, скриншотов или интерфейсной графики, а переход на WebP/AVIF невозможен из-за требований шаблона, CMS или совместимости.

Но ZopfliPNG не решает все проблемы производительности изображений. Если PNG огромный по размеру в пикселях, сначала нужно уменьшить разрешение. Если PNG используется для фотографии, нужно пересмотреть формат. Если изображение грузится вне видимой области, важнее lazy loading. ZopfliPNG — это последний слой оптимизации, а не замена нормальной работы с изображениями.

Безопасность и лицензия

ZopfliPNG относится к открытой экосистеме Google Zopfli. Код распространяется под лицензией Apache-2.0, а сама программа работает с обычным PNG и не создает закрытый формат. Для пользователя это означает две практические вещи:

  • результат остается стандартным PNG;

  • поведение программы можно проверить через консольный вывод и параметры запуска.

ZopfliPNG не отправляет изображения в облако и не требует веб-интерфейса. При локальном запуске файлы обрабатываются на компьютере пользователя или на сервере, где выполняется команда. Это удобно для рабочих проектов, где нельзя передавать исходные изображения сторонним онлайн-сервисам.

Когда ZopfliPNG стоит использовать

ZopfliPNG стоит применять, если:

  • нужно сжать PNG без перехода на другой формат;

  • важна максимальная экономия размера;

  • изображение уже финальное;

  • можно подождать;

  • есть много повторных загрузок одного и того же файла пользователями;

  • требуется CLI-инструмент для пайплайна;

  • нужно оптимизировать PNG-ассеты сайта или приложения.

Хорошие кандидаты:

ФайлПодходит
logo.pngда, с проверкой chunks
icon-close.pngда
screenshot-ui.pngда
button-bg.pngда
photo.pngчаще нет, лучше другой формат
scan-16bit.pngосторожно, без lossy-параметров
sprite.pngда
transparent-badge.pngда

Когда программа не подойдет

ZopfliPNG не подойдет, если пользователь хочет:

  • работать только через графический интерфейс;

  • редактировать изображение;

  • массово конвертировать форматы;

  • быстро сжимать тысячи файлов каждый день;

  • оптимизировать фотографии;

  • получить WebP/AVIF;

  • сохранить все метаданные без понимания chunks;

  • добиться сильного уменьшения размера любой ценой.

В последнем случае лучше рассматривать pngquant, WebP, AVIF или изменение разрешения изображения. ZopfliPNG силен именно как аккуратный PNG recompressor.

Итоговая оценка

ZopfliPNG — не универсальный графический инструмент, а точная консольная программа для финальной оптимизации PNG. Ее сильная сторона — плотное Deflate-сжатие, перебор PNG-фильтров, работа с color type, управление chunks и пригодность для автоматизации. Ее слабая сторона — скорость и отсутствие GUI.

Для веб-разработчика, технического SEO-специалиста, верстальщика или владельца сайта ZopfliPNG полезен как последний этап подготовки PNG-графики. Для дизайнера он полезен после экспорта, но не вместо редактора. Для массовой ежедневной обработки он может быть слишком медленным, зато для финального релиза часто оправдан.

Лучшая формула применения простая: сначала правильно выбрать формат и размер изображения, затем экспортировать чистый PNG, затем прогнать ZopfliPNG, затем проверить результат в целевом окружении. В таком сценарии zopflipng делает именно то, для чего создан: уменьшает PNG-файл настолько, насколько это разумно в рамках стандартного PNG.


Ваш адрес email не будет опубликован. Обязательные поля помечены *