Открыть сервисСервис

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» Стива Чамберлина и Глена Рандерс-Персона
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru