PNG
(
англ.
portable network graphics
, сокращение произносится по-английски
/pɪŋ/
) —
растровый
формат хранения графической информации, использующий
сжатие без потерь
по алгоритму
Deflate
.
PNG был создан как
свободный
формат для замены
GIF
, поэтому в Интернете появился
рекурсивный акроним
«PNG is Not GIF»
(PNG — не GIF).
История формата
4 января 1995 года Томас Боутелл предложил в ряде конференций
Usenet
создать свободный формат, который был бы не хуже GIF. Через три недели после публикации идеи были разработаны четыре версии нового формата. Вначале он имел название PBF (Portable Bitmap Format), а нынешнее имя получил 23 января 1995 года. Уже в декабре того же года спецификация PNG версии 0.92 была рассмотрена консорциумом
W3C
, а с выходом 1 октября 1996 года версии 1.0 PNG был рекомендован в качестве полноправного сетевого формата.
Область применения
|
Изображение в формате PNG с 8-битным каналом прозрачности поверх шахматного фона, который обычно используется в графических редакторах для индикации прозрачности
|
Формат PNG спроектирован для замены устаревшего и более простого формата
GIF
, а также, в некоторой степени, для замены значительно более сложного формата
TIFF
. Формат PNG позиционируется прежде всего для использования в
Интернете
и редактирования графики.
PNG поддерживает три основных типа
растровых изображений
:
Формат PNG хранит графическую информацию в сжатом виде. Причём это сжатие производится без потерь, в отличие, например, от
JPEG
.
Он имеет следующие основные преимущества перед GIF:
-
практически неограниченное
количество цветов в изображении (GIF использует в лучшем случае 8-битный цвет);
-
опциональная поддержка
альфа-канала
;
-
возможность
гамма-коррекции
;
-
двумерная
чересстрочная развёртка
;
-
возможность расширения формата пользовательскими блоками (на этом основан, в частности,
APNG
).
Формат GIF был разработан фирмой
в 1987 году и изначально был недоступен для свободного использования. До окончания в 2004 году действия патентов на алгоритм сжатия
LZW
, принадлежавших
Unisys
и используемых в GIF, его применение в
свободном программном обеспечении
было затруднено. Теперь такие затруднения сняты. PNG же с самого начала использует открытый, непатентованный алгоритм сжатия
Deflate
, бесплатные реализации которого доступны в Интернете. Этот же алгоритм используют многие программы компрессии данных, в том числе
PKZIP
и
gzip
(GNU zip).
Формат PNG обладает более высокой степенью сжатия для файлов с большим количеством цветов, чем GIF, но разница составляет около 5-25 %, что недостаточно для абсолютного преобладания формата, так как небольшие 2-16-цветные файлы формат GIF сжимает с не меньшей эффективностью.
PNG — хороший формат для редактирования изображений, даже для хранения промежуточных стадий редактирования, так как восстановление и пересохранение изображения проходят без потерь в качестве. Также, в отличие, например, от TIFF, спецификация PNG не позволяет авторам реализаций выбирать, какие возможности они собираются реализовать. Поэтому любое сохранённое изображение PNG может быть прочитано в любом другом приложении, поддерживающем PNG.
Различные реализации алгоритма Deflate дают разную степень сжатия, поэтому были созданы программы для пережатия изображений с несколькими вариантами настроек в целях получения наилучшего сжатия — например,
форк
pngcrush
OptiPNG
и advpng из комплекта
(использует
7-Zip
).
Анимация
Существует одна особенность GIF, которая в PNG не реализована: поддержка нескольких изображений в одном файле, и в частности — анимации; PNG изначально был предназначен лишь для хранения одного изображения в одном файле.
Для передачи
анимированных
изображений был разработан расширенный формат
MNG
, опубликованный в середине 1999 года и уже поддерживаемый в различных приложениях, однако пока так и не ставший общепринятым.
Некоторые — в частности, разработчики
Mozilla Foundation
— критиковали MNG за сложность и большой размер реализации, и отсутствие обратной совместимости с PNG. В 2004 году они разработали формат
APNG
, который не был принят в качестве официального стандарта разработчиками PNG и MNG, но его поддержка к 2008 году была реализована в тестовых сборках некоторых
браузеров
и некоторых программах
просмотра изображений
.
Совместимость с браузерами
Не все
веб-браузеры
одинаково отображают содержимое png-файла. Проблемными местами могут быть:
-
частичная прозрачность (
альфа-канал
)
-
поддержка прозрачности в палитре
-
гамма-коррекция
-
цветовая коррекция
(
ICC
)
Проблема поддержки 32-битной (полной) прозрачности картинки формата PNG в Microsoft
Internet Explorer
была решена в седьмой версии браузера. Для остальных версий IE есть несколько способов, которые помогут веб-мастеру добиться прозрачности путём включения в веб-страницу специальных функций и скриптов.
Название
-
Неофициально PNG расшифровывают как «PNG is Not GIF» («PNG — это не GIF») по аналогии с известным
рекурсивным акронимом
«
GNU
is Not
UNIX
» («GNU — это не UNIX»).
-
PNG произносится по-английски так же, как слово
ping
, то есть [
pɪŋ
].
Формат файла
Заголовок файла
PNG файл начинается с 8 байт
подписи файла
Значение (
hex
)
|
Назначение
|
89
|
Non-ASCII символ. Препятствует распознаванию PNG, как текстового файла.
|
50 4E 47
|
PNG в
ASCII
записи.
|
0D 0A
|
CRLF
,
DOS
-style перевод строки.
|
1A
|
Останавливает вывод файла в DOS режиме (end-of-file).
|
0A
|
LF
, Unix-style перевод строки.
|
Чанки (Chunks)
Чанки — это блоки данных, из которых состоит файл. Каждый чанк состоит из 4 секций.
Lenght (длина)
|
Type (тип)
|
Data (данные)
|
CRC
|
4 байта
|
4 байта
|
Length
байт
|
4 байта
|
Длина
Длина - это числовое значение длины блока данных.
Тип
Тип представляет собой 4 чувствительных к регистру
ASCII
-символа. Регистры символов (пятый бит в числовой записи символа) — это флаги, которые сообщают декодеру некоторую дополнительную информацию.
-
Регистр первого символа определяет является ли данный чанк критическим (верхний регистр) или вспомогательным (нижний регистр). Критические чанки должны распознаваться каждым декодером. Если декодер встречает критический чанк, тип которого не может распознать, он обязан завершить выполнение с ошибкой.
-
Регистр второго символа задает «публичность» (верхний регистр) или «приватность» (нижний регистр) чанка. «Публичные» чанки — официальные, задокументированные, распознаваемые большинством декодеров. Но если понадобится кодировать специфическую информацию, то в имени чанка нужно сделать второй символ маленьким.
-
Регистр третьего символа оставлен для будущих свершений. Предполагается, что он будет использоваться для дифференциации различных версий стандарта. Для версий 1.0 и 1.1 третий символ должен быть большим. Если он оказался маленьким, все нынешние декодеры должны поступать с чанком, так же как и с любым другим не распознанным (то есть выходить с ошибкой если чанк критический, или пропускать в противном случае).
-
Регистр же четвертого символа означает возможность копирования данного чанка редакторами, которые не могут его распознать. Если регистр нижний, чанк может быть скопирован, вне зависимости от степени модификации файла, иначе (верхний регистр) он копируется только в случае, когда при модификации не были затронуты никакие критические чанки.
Критические чанки
-
IHDR
— заголовок файла, содержит основную информацию о изображении. Обязан быть первым чанком. Блок данных в
IHDR
содержит следующие поля:
-
Ширина, 4 байта
-
Высота, 4 байта
-
Битовая глубина (bit depth), определяет количество бит на каждый сэмпл(не пиксель), 1 байт
-
Тип цвета, состоит из 3 флагов 1 (используется палитра), 2 (используется цвет, не монохромное изображение), and 4 (присутствует альфа-канал), 1 байт
-
Метод сжатия. На данный момент доступно только значение 0 — сжатие по алгоритму
deflate
. Если значение отлично от 0, чанк считается нераспознанным, и декодер рапортует об ошибке. 1 байт
-
Метод фильтрации. Так же, как и в случае сжатия, на данный момент может быть только нулем. 1 байт
-
Interlace(переплетение) метод. Определяет порядок передачи данных. На данный момент доступно 2 значения: 0 (no interlace) и 1 (
Adam7
interlace). 1 байт
-
PLTE
— палитра, список цветов.
-
IDAT
— содержит, собственно, изображение. Рисунок можно разбить на несколько IDAT чанков, для потоковой передачи. В каждом файле должен быть хотя бы один IDAT чанк. Содержит данные, закодированные, в соответствии с полем метода сжатия в заголовке.
-
IEND
— завершающий чанк, обязан быть последним в файле. Сигнализирует о конце файла, блок данных этого чанка не содержит ничего.
Вспомогательные чанки
-
bKGD
— этот чанк задает основной фоновый цвет.
-
cHRM
используется для задания CIE 1931 цветового пространства.
-
gAMA
— определяет гамму.
-
hIST
- в этом чанке может храниться гистограмма или общее содержание каждого цвета в изображении.
-
iCCP
- цветовой профиль ICC
-
iTXt
- содержит текст в
UTF-8
, возможно сжатый, с необязательной языковой меткой iTXt чанк с ключевым словом 'XML:com.adobe.xmp'
Extensible Metadata Platform (XMP)
.
-
pHYs
- содержит предполагаемый размер пикселя и/или отношение сторон изображения.
-
sBIT (significant bits) — определяет «цветовую точность» (color-accuracy) изображения (черно-белое, полный цвет, черно-белое с прозрачностью и т.д.), для более простого декодирования.
-
sPLT
— предлагает палитру для использования, если полный спектр цветов недоступен.
-
sRGB
— свидетельствует о использовании стандартной
sRGB
схемы.
-
sTER
— индикатор стереоскопических изображений.
-
tEXt
— может содержать текст в
ISO/IEC 8859-1
формате, с одной name=value парой для каждого чанка.
-
tIME
— хранит дату последнего изменения изображения.
-
tRNS
— содержит информацию о прозрачности.
-
zTXt
— сжатый текст, с теми же ограничениям, что и tEXt.
См. также
Примечания
-
↑
-
Roelofs G.
— 2009.
-
от 16 октября 2004 на
Wayback Machine
(англ.)
-
↑
(неопр.)
. Дата обращения: 8 сентября 2004.
16 октября 2004 года.
-
(неопр.)
. Дата обращения: 8 сентября 2004.
16 октября 2004 года.
-
от 8 апреля 2007 на
Wayback Machine
(англ.)
-
В PNG количество цветов всё же имеет предел, но, в отличие от GIF, оно ограничено 2
48
цветами (3×16
бит
).
-
от 8 апреля 2007 на
Wayback Machine
(англ.)
-
(рус.)
Хабр
(15 октября 2011). Дата обращения: 28 декабря 2023.
-
(англ.)
// Wikipedia. — 2023-11-21.
Ссылки
-
(англ.)
(10 ноября 2003). — Рекомендация ISO/IEC спецификации PNG от W3C. Дата обращения: 21 декабря 2007. Архивировано из
22 августа 2011 года.
-
Сергей Чикуенок. Про PNG.
;
;
;
Студия Артемия Лебедева — о практическом применении формата в web
-
Иван Зенков и др.
(неопр.)
(2004). Дата обращения: 14 декабря 2008. Архивировано из
27 августа 2011 года.
-
Michael Lovitt.
(англ.)
. A List Apart Magazine (21 декабря 2002). Дата обращения: 15 марта 2008. Архивировано из
22 августа 2011 года.