Для кого: дизайнеры интерфейсов, арт-директора поставки и инженеры пайплайна, которым нужно стабильно ужимать PNG без смены формата. Вывод: pngquant закрывает «почти без потерь» и палитру, zopflipng — итеративное сжатие без потерь на уровне DEFLATE; вместе они задают двухконтурную матрицу решений, если вы сознательно остаетесь в PNG (без смешения с WebP/AVIF в одном SKU). Ниже — сравнительная таблица, акцент на прозрачном PNG, чеклист sRGB, скелет батча для удалённого Mac M4 и пороги приёмки по байтам; контекст ICC и метаданных см. в гайде по метаданным PNG и sRGB.
Содержание
Три ограничения без явной политики
- Смешение контуров: часть файлов гоняют через палитру, часть — только через DEFLATE; без матрицы SKU внезапно появляются полосы на градиентах или «песок» на тенях.
- Скрытый вес: исходный экспорт из редактора уже близок к бюджету; повторный прогон без контроля max_bytes ломает CDN-лимиты тихо, пока не сработает мониторинг.
- Ночной батч на ноутбуке: термики и сон машины делают время непредсказуемым; на удалённом Mac проще держать фиксированные версии pngquant/zopflipng и очередь, как в подходе к цепочке CLI и повторам на M-серии.
Матрица: pngquant и zopflipng
Оба инструмента остаются в экосистеме PNG и не требуют смены контейнера; угол статьи — параметры и приёмка, а не обзор GUI-агрегаторов.
| Критерий | pngquant | zopflipng |
|---|---|---|
| Тип сжатия | Палитра и квантизация: с контролируемой потерей (или очень узкий коридор «почти без потерь») | Без потерь: подбор фильтров и DEFLATE, пиксели не меняются |
| Типичные флаги | --quality=78-95, --speed 1, --strip; при иконках — более жёсткий потолок цветов |
-y, --iterations=10–15, набор --filters=01234mepb под класс изображения |
| Место в конвейере | После честного экспорта из редактора, до финального lossless | После pngquant или сразу на true-color, если палитра запрещена |
| Риск для прозрачности | Дизер и кромка альфы — контролировать визуально на эталонах | Минимальный; важнее время CPU на больших кадрах |
| Когда не использовать | Если в ТЗ запрещена любая потеря или нужен эталон печати | Если файл уже минимален и выигрыш ниже порога «шума измерений» |
Прозрачный PNG и альфа
Прозрачность — это не только «есть/нет альфы», а согласованность кромки с подложкой. Для квантизации задайте эталонные файлы с тонкими свечениями и полупрозрачными тенями; сравните с исходником на тёмном и светлом фоне в превью-браузере. Если в партии есть смесь фотографий и плоского UI, разведите их по разным профилям pngquant — иначе одна «средняя» настройка даст либо лишний вес, либо артефакты на градиентах. Экспорт из слоистых исходников лучше заранее выровнять по сетке и глубине цвета, о чём см. также матрицу PSD→PNG и пакет на Mac.
Приёмка sRGB
sRGB принимается не «на глаз», а по политике: либо встроенный профиль sRGB IEC61966-2.1, либо явное соглашение «без ICC, ожидаем дисплейный sRGB», зафиксированное в README поставки. После pngquant перечитайте чанки: инструмент может убрать часть метаданных при --strip — это хорошо для веса, но должно совпадать с тем, что вы описали в гайде по ICC. Визуальная выборка на одном мониторе sRGB и одном широком охвате позволяет поймать случайный клиппинг насыщенности до того, как артефакт попадёт в магазин приложений.
HowTo: батч на удалённом Mac M4
Скелет для узла Apple Silicon: каталог inbox → work → out, лог с версиями бинарников, параллелизм $(($(sysctl -n hw.ncpu)-1)) или очередь parallel по файлам. На каждый файл пишите исходные байты, итоговые байты и имя профиля (lossless / near-lossless). Не смешивайте в одном проходе разные классы SKU — отдельные конфиги YAML проще сопровождать, чем длинные условия в одном скрипте. Для ночных прогонов удобнее держать воркер на удалённом Mac: стабильные пути, предсказуемые термики и отсутствие сна клиентской машины.
# Пример ветки «почти без потерь» + lossless DEFLATE (пути и маски подставьте свои)
find ./work -name '*.png' -print0 | xargs -0 -P 4 -I{} sh -c \
'pngquant --quality=82-96 --speed 1 --strip --ext .png --force "{}" && zopflipng -y --iterations=12 "{}"'
Чеклист порогов байтов
- Бюджет по классу:
max_bytesдля иконки, карточки и полноэкранного кадра заданы отдельно; общий потолок партии не компенсирует выбросы. - Анти-регрессия: если новый файл крупнее исходного после lossless-ветки — отбрасывать результат и логировать (часто сигнал о неудачном пресете фильтров).
- Коридор для pngquant: нижняя граница качества не должна уходить ниже согласованного минимума; при срабатывании — ручной осмотр эталона, а не автоматический повтор «до упора».
- Альфа: выборочная проверка кромки и областей с малым альфа; для критичных игровых ассетов — отдельный список файлов с полным визуальным QA.
- Воспроизводимость: фиксируйте версии pngquant и zopflipng в
manifest.jsonрядом с хешем партии.
Цифры для спецификации
- Ориентир по времени: на крупных кадрах 4K zopflipng с высоким числом итераций может занимать минуты на файл — закладывайте очередь и тайм-ауты воркера.
- Ориентир по качеству pngquant: стартовый коридор
--quality=82-96и--speed 1для превью-близкого результата; сужайте коридор под ваши эталоны. - Ориентир по выигрышу: считайте экономию в процентах отдельно для lossless и near-lossless веток; смешивание статистик недопустимо при отчёте перед заказчиком.
Итог: матрица «pngquant для контролируемой потери / zopflipng для без потерь» снимает споры в команде, если закрепить SKU, пороги байтов и политику sRGB. Для дизайнерской поставки с ночными батчами и стабильной средой откройте аренду и покупку, тарифы и узлы и помощь по SSH и VNC — сравнить планы можно без входа в аккаунт. Дополнительные материалы — в разделе Технические идеи.
Дизайн-поставка PNG: батч на выделенном удалённом Mac
Запускайте pngquant и zopflipng в воспроизводимом контуре на Apple Silicon: одна очередь, одни версии бинарников, предсказуемые пороги байтов для UI-ассетов.