Как сжать PNG без «мыла» и артефактов

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

Почему PNG сжать сложнее, чем JPEG

PNG использует алгоритм сжатия без потерь (lossless), основанный на Deflate. Это означает, что стандартное сжатие не ухудшает качество, но и не даёт такого выигрыша в весе, как lossy-форматы. Чтобы реально уменьшить файл, применяют дополнительные техники, которые работают на уровне палитры, прозрачности и предварительной фильтрации пикселей.

Ключевые причины, по которым наивное сжатие даёт «мыло»:

  • Принудительная конвертация в JPEG внутри инструментов «оптимизации»
  • Даунсэмплинг (уменьшение разрешения) без предупреждения
  • Применение lossy-алгоритмов к PNG-палитре с большими допусками
  • Агрессивное снижение битности без дизеринга

Методы сжатия PNG и их влияние на качество

Существует два принципиальных подхода: lossless-оптимизация и lossy-оптимизация PNG. Они дают разный результат по весу и качеству.

Метод Потеря качества Снижение веса Подходит для
Lossless (oxipng, zopfli) 0% 5–20% Любые PNG
Lossy quantization (pngquant) минимальная при quality ≥ 80 40–70% Фото-иллюстрации, скриншоты
Снижение битности до 8-bit заметная при gradients 30–50% Иконки, логотипы с плоскими цветами
Удаление метаданных (exif, icc) 0% 1–15 КБ на файл Все PNG

Инструменты для сжатия PNG без артефактов

На 2026 год наиболее актуальны следующие инструменты с поддержкой актуальных стандартов и алгоритмов:

  • pngquant 2.x — lossy-квантование с настройкой quality (0–100), поддерживает —quality 80-95 для баланса веса и чёткости
  • oxipng 9.x — lossless-оптимизация, многопоточная, поддерживает zopfli-компрессию; типичный выигрыш — 10–18%
  • Squoosh (Google) — браузерный инструмент с WebAssembly-бэкендом, использует OxiPNG и pngquant; обновлён в 2025 году
  • ImageMagick 7.x — командная строка, параметр -define png:compression-level=9 без потерь
  • Sharp (Node.js) — серверная оптимизация, поддерживает compressionLevel и effort для PNG
  • TinyPNG API — облачный сервис, lossy-алгоритм, лимит 500 изображений/месяц бесплатно в 2026 году

Настройки pngquant для предотвращения «мыла»

Самая частая причина размытости при сжатии PNG — неправильно выставленный параметр quality в pngquant. Рекомендуемые значения:

Сценарий Команда / параметр Ожидаемый вес
Веб-иконки, UI-элементы —quality=90-100 —speed 1 −40% без видимых потерь
Скриншоты с текстом —quality=85-95 —nofs −45–55%, текст читаем
Иллюстрации с градиентами —quality=80-90 —dithering=0.8 −50–65%, без полос
Максимальное сжатие (допустимы артефакты) —quality=60-80 —speed 3 −65–75%

Роль дизеринга при снижении битности

При переходе с 32-bit или 24-bit PNG на 8-bit палитру (256 цветов) градиентные переходы теряют плавность. Дизеринг — метод добавления шума для имитации промежуточных цветов. Без него на фото появляются полосы, а на скриншотах — «грязь» вокруг теней.

  • Floyd-Steinberg — стандартный алгоритм дизеринга, встроен в pngquant и ImageMagick; даёт естественный зернистый переход
  • Ordered dithering — создаёт регулярный паттерн, подходит для пиксель-арта и иконок
  • Без дизеринга (—nofs) — лучший выбор для изображений с чёткими линиями и плоскими цветами (логотипы, UI)

Альтернатива PNG: когда лучше перейти на WebP или AVIF

Если изображение содержит фотографический контент с плавными градиентами — PNG изначально не оптимальный формат. Сравнение форматов на 2026 год:

Формат Поддержка браузеров (2026) Сжатие vs PNG Прозрачность
PNG (оптимизированный) 100% базовый Да (alpha)
WebP lossless 97% −26% vs PNG Да
WebP lossy 97% −60–75% vs PNG Да
AVIF 93% −50–80% vs PNG Да

Практический чеклист сжатия PNG без потери качества

  • Удалить метаданные (exif, icc-profile, текстовые чанки) — нулевая потеря качества, экономия до 15 КБ
  • Запустить oxipng с флагом —opt max для lossless-оптимизации перед lossy-этапом
  • Применить pngquant с —quality не ниже 80 при наличии текста или мелких деталей
  • Проверить результат при 100% масштабе, а не в уменьшенном превью
  • Сравнивать исходник и результат в режиме pixel peeping — увеличение 400% выявляет артефакты, незаметные при обычном просмотре
  • Для градиентных PNG включить дизеринг Floyd-Steinberg с уровнем 0.7–0.9
  • Для иконок и UI с плоскими цветами дизеринг отключить (—nofs)
  • Автоматизировать pipeline через imagemin, sharp или GitHub Actions для batch-обработки

Типичные ошибки и как их избежать

Ошибка Последствие Решение
Сохранение через «Сохранить для Web» в Photoshop без настроек Автоконвертация в JPEG или агрессивный lossy Использовать «Export As» → PNG + ручной прогон oxipng
Онлайн-сервисы без указания quality Непредсказуемый результат, часто quality=60 TinyPNG API с явным указанием параметров или локальный pngquant
Повторное сжатие уже сжатого PNG Накопление артефактов квантования Всегда работать с оригиналом, хранить мастер-файл
Игнорирование ICC-профиля Цветовой сдвиг на откалиброванных мониторах Встраивать sRGB-профиль или удалять только нестандартные профили
Оцените статью
GifFun.ru