Формат изображений PNG¶
PNG (Portable Network Graphics, произносится «пин-э-нг-э») — растровый формат хранения изображений с потерей качества при сжатии, созданный в 1990-х годах как замена устаревшему формату GIF. Основная особенность PNG — сжатие без потерь (lossless), что означает полное сохранение исходных данных изображения после многократного сохранения и открытия файла. Формат поддерживает альфа-канал прозрачности, 24-битную цветовую глубину (16,7 млн цветов) и широкий набор метаданных.
¶История создания
Формат PNG был разработан в 1995 году группой разработчиков во главе с Томасом Бутеллом (Thomas Boutell). Создание формата стало ответом на несколько проблем, связанных с использованием GIF:
- Компрессия LZW, применяемая в GIF, была защищена патентом компании Unisys, что создавало юридические риски для разработчиков программного обеспечения.
- GIF ограничивал палитру 256 цветами и поддерживал лишь бинарную (однобитовую) прозрачность — пиксель либо полностью прозрачен, либо полностью непрозрачен, без полупрозрачных оттенков.
В 1995 году на конференции comp.graphics разработчики опубликовали спецификацию PNG. Формат быстро получил поддержку ведущих браузеров и графических редакторов. В 1997 году PNG был принят в качестве рекомендованного стандарта консорциумом W3C. В 2004 году формат был утверждён как международный стандарт ISO/IEC 15948.
¶Технические особенности
¶Сжатие
PNG использует алгоритм сжатия DEFLATE, сочетающий LZ77 и кодирование Хаффмана. В отличие от JPEG, который применяет сжатие с потерями (квантование частотных коэффициентов), PNG сохраняет каждый пиксель в исходном виде. Это делает формат предпочтительным для:
- графики с чёткими границами (логотипы, иконки, диаграммы);
- изображений с текстом;
- картинок, которые планируется многократно редактировать и пересохранять;
- изображений с прозрачностью.
Для фотографий с плавными градиентами PNG обычно даёт файл большего размера, чем JPEG.
¶Прозрачность
PNG поддерживает два типа прозрачности:
- Indexed transparency — прозрачность задаётся для отдельных цветов палитры (аналог GIF).
- Alpha-канал — 8-битный канал, задающий степень прозрачности для каждого пикселя (256 уровней, от полностью прозрачного до полностью непрозрачного). Это позволяет создавать плавные края при наложении изображений.
¶Цветовые модели
PNG поддерживает несколько цветовых пространств:
| Цветовая модель | Описание |
|---|---|
| Grayscale | Оттенки серого, 1/2/4/8/16 бит на пиксель |
| RGB | Трёхканальное цветное изображение, 8/16 бит на канал |
| Palette | Палитра до 256 цветов (indexed color) |
| Grayscale + Alpha | Серое изображение с альфа-каналом |
| RGBA | Цветное изображение с альфа-каналом |
¶Структура файла
Файл PNG начинается с сигнатуры — восьми байт: 89 50 4E 47 0D 0A 1A 0A. Далее файл состоит из последовательности «чанков» (chunks), каждый из которых содержит заголовок, данные и контрольную сумму CRC-32. Ключевые чанки:
- IHDR — заголовок изображения (ширина, высота, глубина цвета, тип сжатия);
- IDAT — собственно данные изображения, сжатые DEFLATE;
- PLTE — палитра (для indexed-изображений);
- IEND — маркер конца файла.
Дополнительные чанки позволяют хранить текстовые метаданные (tEXt), профиль ICC, информацию о гамма-коррекции, анимированные кадры (APNG).
¶Разновидности
¶APNG
APNG (Animated PNG) — расширение, добавляющее поддержку анимации. Предложено компанией Mozilla в 2008 году. В отличие от GIF, APNG поддерживает 24-битный цвет и альфа-канал. Формат поддерживается браузерами Firefox, Chrome (с 2019 года) и Safari.
¶MNG
MNG (Multiple-image Network Graphics) — более сложный формат анимации, разработанный создателями PNG. Из-за сложности реализации получил ограниченное распространение.
¶PNG-24 и PNG-8
В графических редакторах (Photoshop, GIMP) принято деление на PNG-8 (палитра до 256 цветов, малый размер файла) и PNG-24 (полноцветное изображение с возможным альфа-каналом). Это не отдельные форматы, а режимы экспорта.
¶Применение
PNG широко используется в веб-дизайне для хранения иконок, логотипов, скриншотов, диаграмм и графики с прозрачностью. Формат является обязательным для поддержки в браузерах согласно спецификации HTML5. В операционных системах PNG применяется для иконок интерфейса. Многие мессенджеры и социальные сети используют PNG для стикеров и эмодзи.
¶Ограничения
- Отсутствие поддержки в исходной спецификации CMYK-цветового пространства (ограничение для полиграфии).
- Размер файлов с фотографиями существенно больше, чем у JPEG.
- Отсутствие нативной поддержки 16-бит на канал в некоторых старых редакторах.
Источники:
- ISO/IEC 15948:2003 — Information technology — Computer graphics and image processing — Portable Network Graphics (PNG)
- Boutell T. PNG Specification (RFC 2083), 1997
- W3C Recommendation: PNG Specification (Second Edition)
- Crocker L. PNG: The Definitive Guide, O'Reilly Media, 2000
