PNG — формат сжатия растровых изображений¶
PNG (Portable Network Graphics, «переносимая графика для сети») — растровый формат хранения изображений с без потерь сжатием, созданный как замена устаревшему формату GIF. Основные характеристики: поддержка альфа-канала (полупрозрачности), 24-битный цвет (16,7 млн цветов), без потерь при повторном сжатии, открытая спецификация без патентных ограничений. Файлы PNG используют расширение .png и MIME-тип image/png.
¶История создания
Формат разработан в 1995 году рабочей группой PNG Development Group как ответ на обнаруженную патентную проблему. Компания Unisys и IBM владели патентом на алгоритм сжатия LZW, который использовался в GIF. Владельцы патента потребовали лицензионных платежей от разработчиков программного обеспечения, что вызвало обеспокоенность сообщества программистов.
Первая версия спецификации (0.95) появилась в октябре 1995 года. Формат быстро получил поддержку основных браузеров: Netscape Navigator 2.0 и Internet Explorer 4.0 поддерживали PNG ещё до выхода окончательной редакции стандарта. В 1996 году формат был официально утверждён как стандарт ISO/IEC 15948 (в редакции W3C — рекомендация от 1 октября 1996 года).
¶Технические особенности
¶Структура файла
Формат PNG основан на контейнере, построенном по принципу «чанков» (chunks). Каждый файл начинается с фиксированной 8-байтовой сигнатуры: 89 50 4E 47 0D 0A 1A 0A. Далее следуют блоки данных, каждый из которых состоит из длины (4 байта), типа (4 байта), содержимого и контрольной суммы CRC-32.
Основные типы чанков:
| Тип | Назначение |
|---|---|
| IHDR | Заголовок изображения (ширина, высота, глубина цвета, тип сжатия) |
| PLTE | Палитра (для индексированных изображений) |
| IDAT | Сжатые данные изображения |
| IEND | Конец файла |
| tRNS | Данные о прозрачности |
| tEXt / iTXt / zTXt | Метаданные текстом |
¶Сжатие
Сжатие в PNG основано на алгоритме DEFLATE — комбинации LZ77 и адаптивного Huffman-кодирования. Алгоритм не является запатентованным и свободно используется во множестве программных продуктов. Перед сжатием применяется фильтрация: каждая строка пикселей преобразуется одним из пяти фильтров (None, Sub, Up, Average, Paeth), что повышает эффективность DEFLATE.
¶Типы изображений
PNG поддерживает несколько типов пиксельных данных:
- Truecolor — 24 бита на пиксель (8 бит на канал RGB);
- Truecolor с альфа-каналом — 32 бита (RGBA);
- Градации серого — 1, 2, 4, 8 или 16 бит;
- Индексированный цвет — палитра до 256 цветов (аналог GIF).
¶Прозрачность
PNG поддерживает два механизма прозрачности:
- Binary transparency — один цвет из палитры или значения RGB объявляется полностью прозрачным (аналог GIF).
- Alpha-канал — каждый пиксель имеет значение прозрачности от 0 (полностью прозрачный) до 255 (полностью непрозрачный). Это позволяет создавать плавные градиенты прозрачности, что недоступно в GIF.
¶Применение
PNG широко используется в веб-дизайне для хранения графики с прозрачностью: логотипов, иконок, интерфейсных элементов, диаграмм, скриншотов. Благодаря без потерь сжатию формат подходит для изображений с резкими границами цветов, текстом и большим количеством однотонных областей.
Для фотографий PNG, как правило, не оптимален: сжатие без потерь даёт файлы значительно большие, чем lossy-форматы (JPEG, WebP). В таких случаях предпочтительнее использовать форматы со сжатием с потерями.
¶Разновидности
- APNG (Animated PNG) — расширение, добавляющее поддержку анимации. Разработано компанией Mozilla в 2008 году. Поддерживается браузерами Firefox, Chrome, Safari; в стандарт W3C не вошло.
- MNG — формат анимированной многослойной графики, разработанный как замена анимированного GIF. Практического распространения не получил.
- PNG-24 / PNG-8 — обиходные обозначения, соответствующие truecolor-изображениям и индексированному цвету соответственно.
¶Ограничения
PNG не поддерживает векторную графику (в отличие от SVG), CMYK-цветовое пространство (ограничение для полиграфии) и сжатие с потерями. Формат также не предназначен для хранения многослойных изображений (в отличие от TIFF или PSD).
¶Стандартизация
Спецификация формата поддерживается Консорциумом W3C и является международным стандартом ISO/IEC 15948:2003. Последняя редакция стандарта датируется 2003 годом; формат остаётся стабильным и не претерпевает существенных изменений.
¶Источники
- ISO/IEC 15948:2003 — Information technology — Computer graphics and image processing — Portable Network Graphics (PNG)
- Рекомендация W3C: PNG Specification (Second Edition)
- RFC 2083 — PNG: Portable Network Graphics (T. Boutell, 1997)
- Handbook of Image and Video Processing (A. Bovik, 2005)
