PNG — формат растровых изображений¶
PNG (сокр. от англ. Portable Network Graphics — «переносимая графика для сети») — формат сжатия и хранения растровых графических данных, созданный как свободная и патентно безопасная замена формату GIF. Формат поддерживает сжатие без потерь, альфа-канал (полупрозрачность), широкую цветовую палитру и метаданные; официальная спецификация опубликована консорциумом W3C.
¶История создания
В 1995 году компания Unisys и CompuServe заявили, что алгоритм сжатия LZW, используемый в формате GIF, защищён патентом (патент США №4 555 775, принадлежавший Unisys). Разработчики свободного ПО столкнулись с необходимостью либо платить роялти, либо отказываться от формата. В ответ на это программист Роберт Брюс (Robert Bruce) в мае 1995 года предложил новый формат под рабочим названием «PNG» — сжатый без потерь и свободный от патентных ограничений.
Разработка велась открытым сообществом. Ключевые фигуры проекта — Томас Бутелл (Thomas Boutell), Марк Адлер, Гай Эриксон и другие участники группы png-mng-hackers. Первая спецификация (PNG 1.0) была опубликована консорциумом W3C 1 октября 1996 года. Формат быстро получил поддержку основных браузеров: Netscape и Internet Explorer добавили поддержку PNG в конце 1990-х годов.
¶Технические особенности
¶Структура файла
Файл PNG начинается с фиксированной сигнатуры из 8 байт: 89 50 4E 47 0D 0A 1A 0A. Старший байт 0x89 выбран так, чтобы файл не распознавался как текст в ASCII-кодировке. Далее файл состоит из последовательности «чанков» (chunks), каждый из которых имеет заголовок с длиной, типом данных и контрольной суммой CRC-32.
Основные типы чанков:
| Чанк | Назначение |
|---|---|
IHDR | Заголовок изображения: ширина, высота, глубина цвета, тип сжатия |
PLTE | Палитра (для индексированных изображений) |
IDAT | Сжатые пиксельные данные |
IEND | Конец файла |
tRNS | Данные о прозрачности |
tEXt, iTXt | Текстовые метаданные |
gAMA, sRGB | Информация о гамма-коррекции и цветовом пространстве |
¶Сжатие
PNG использует алгоритм DEFLATE — комбинацию LZ77 и кодирования Хаффмана, ту же, что применяется в формате ZIP. Сжатие всегда без потерь: исходные пиксельные данные восстанавливаются побайтово. Перед сжатием к каждой строке изображения применяется фильтр (0–4): None, Sub, Up, Average или Paeth — выбор фильтра помогает убрать локальную статистическую избыточность и повысить степень сжатия.
¶Цветовые модели и прозрачность
PNG поддерживает несколько типов пикселей:
- Grayscale — оттенки серого, 1/2/4/8/16 бит на пиксель;
- Truecolor — RGB, 8 или 16 бит на канал;
- Indexed-color — палитра до 256 цветов;
- Grayscale+Alpha и Truecolor+Alpha — с альфа-каналом.
Альфа-канал задаёт уровень непрозрачности каждого пикселя (0–255 при 8-битной глубине), что позволяет реализовывать плавную полупрозрачность, а не только бинарную «прозрачно/непрозрачно», как в GIF.
¶Ограничения
PNG не поддерживает анимацию (для этого создан связанный формат APNG или MNG), не оптимален для фотографий со сложными градиентами — для таких задач эффективнее JPEG. Формат также не поддерживает CMYK-цветовое пространство, что ограничивает его применение в полиграфии.
¶Разновидности
- APNG — расширение, добавляющее поддержку анимации; поддерживается браузерами Firefox и Chrome.
- MNG — более сложный формат анимации, предложенный как полноценная замена GIF, получил ограниченное распространение.
- PNG-8 и PNG-24 — обиходные обозначения, соответствующие индексированной палитре (8 бит) и Truecolor с альфа-каналом (24+8 бит).
¶Применение
PNG широко используется в веб-дизайне для иконок, логотипов, диаграмм, скриншотов и любых изображений с чёткими границами и плоскими заливками. Благодаря сжатию без потерь и альфа-каналу формат стал стандартом для графики с прозрачностью. Официальные эмодзи Unicode хранятся в формате PNG. Многие программы для работы с графиком (GIMP, Adobe Photoshop, Paint.NET) поддерживают PNG как один из основных форматов сохранения.
¶Статус и стандарты
PNG включён в стандарт ISO/IEC 15948:2003. Формат полностью свободен от патентных ограничений: патент Unisys на LZW истёк в 2004 году в США и в 2003 году в других странах, а алгоритм DEFLATE, лежащий в основе PNG, изначально разработан как свободный.
¶Интересные факты
Сигнатура PNG содержит байт 0x0A (перевод строки), из-за чего при передаче файла по текстовым протоколам без режима binary (например, по FTP в текстовом режиме) файл мог повреждаться — это одна из причин, по которой формат изначально ориентировался на бинарную передачу.
Источники:
- W3C. PNG Specification (Second Edition), ISO/IEC 15948:2003
- Boutell T. and others. PNG (Portable Network Graphics) Specification, Version 1.0. — RFC 2083, 1997
- Книга «PNG: The Complete Reference» Стива Чамберлина и Глена Рандерс-Персона
