PNG

Семейство форматов файлов изображений со сжатием без потерь

Переносимая сетевая графика

PNG-изображение четырех разноцветных игральных костей с 8-битным каналом прозрачности, наложенное на клетчатый фон, обычно используемое в графических программах для обозначения прозрачности.
Расширение имени файла
.png
Тип интернет-СМИ
image/png
Код типаPNGf
PNG (включая один конечный пробел)
Единый идентификатор типа (UTI)общественность.png
Конформация ИМПобщественное.изображение
Магическое число89 50 4e 47 0d 0a 1a 0a(8 байт в шестнадцатеричном формате )
РазработаноPNG Development Group (пожертвовано W3C )
Первоначальный выпуск1 октября 1996 г .; 28 лет назад ( 1996-10-01 )
Тип формата Формат растрового изображения без потерь
Расширено доAPNG , JNG и MNG
СтандартИСО / МЭК 15948 , [1] IETF RFC 2083
Открытый формат ?Да
Веб-сайт
  • www.w3.org/TR/png/ (спецификация)
  • libpng.org/pub/png/ (домашний сайт)

Portable Network Graphics ( PNG , официально произносится / pɪŋ / [ 2] [ 3] PING , в разговорной речи произносится / ˌp iːɛnˈdʒiː / [ 4] PEE -en- JEE ) — формат файла растровой графики , поддерживающий сжатие данных без потерь . [ 5] PNG был разработан как улучшенная, незапатентованная замена формату Graphics Interchange Format ( GIF ) — неофициально аббревиатура PNG расшифровывается как рекурсивная аббревиатура « PNG’s not GIF ». [6]

PNG поддерживает изображения на основе палитры (с палитрами 24-битных цветов RGB или 32-битных цветов RGBA ), изображения в градациях серогоальфа-каналом для прозрачности или без него) и полноцветные изображения RGB или RGBA без палитры. Рабочая группа PNG разработала формат для передачи изображений в Интернете , а не для печатной графики профессионального качества; поэтому не-RGB цветовые пространства, такие как CMYK, не поддерживаются. Файл PNG содержит одно изображение в расширяемой структуре фрагментов , кодируя основные пиксели и другую информацию, такую ​​как текстовые комментарии и проверки целостности, задокументированные в RFC 2083. [7]

Файлы PNG имеют расширение файла ".png" и тип носителя MIME "image/png" . [8] PNG был опубликован как информационный RFC 2083 в марте 1997 года и как стандарт ISO/IEC 15948 в 2004 году. [1]

История и развитие

Мотивацией создания формата PNG послужило объявление от 28 декабря 1994 года о том, что реализации формата Graphics Interchange Format (GIF) должны будут выплачивать роялти Unisys из-за их патента на алгоритм сжатия данных Lempel–Ziv–Welch (LZW), используемый в GIF. [9] Это вызвало шквал критики со стороны пользователей Usenet . Одним из них был Томас Бутелл, который 4 января 1995 года опубликовал предварительную ветку обсуждения в группе новостей Usenet «comp.graphics», в которой он разработал план бесплатной альтернативы GIF. Другие пользователи в этой ветке выдвинули множество предложений, которые позже стали частью окончательного формата файла. Оливер Фромм, автор популярного просмотрщика JPEG QPEG, предложил название PING, в конечном итоге ставшее PNG, рекурсивным акронимом, означающим, что PING не является GIF , [10] а также расширение .png . Другие предложения, реализованные позже, включали алгоритм сжатия deflate и поддержку 24-битного цвета , отсутствие последнего в GIF также мотивировало команду на создание своего формата файла. Группа стала известна как PNG Development Group, и поскольку обсуждение быстро расширялось, она позже использовала список рассылки, связанный с форумом CompuServe . [2] [11]

Полная спецификация PNG была выпущена с одобрения W3C 1 октября 1996 года, а позднее как RFC 2083 15 января 1997 года. Спецификация была пересмотрена 31 декабря 1998 года как версия 1.1, которая решала технические проблемы гамма- и цветовой коррекции . Версия 1.2, выпущенная 11 августа 1999 года, добавила фрагмент iTXt как единственное изменение спецификации, а переформатированная версия 1.2 была выпущена как второе издание стандарта W3C 10 ноября 2003 года [12] и как международный стандарт (ISO/IEC 15948:2004) 3 марта 2004 года. [13] [1]

Хотя GIF допускает анимацию , изначально было решено, что PNG должен быть форматом с одним изображением. [14] В 2001 году разработчики PNG опубликовали формат Multiple-image Network Graphics (MNG) с поддержкой анимации. MNG получил умеренную поддержку приложений, но недостаточную среди основных веб-браузеров и не использовался среди веб-дизайнеров или издателей веб-сайтов. В 2008 году некоторые разработчики Mozilla опубликовали формат Animated Portable Network Graphics (APNG) с аналогичными целями. APNG — это формат, который изначально поддерживается веб-браузерами на базе Gecko и Presto , а также широко используется для миниатюр в системе Sony PlayStation Portable (с использованием обычного расширения файла PNG). В 2017 году браузеры на базе Chromium приняли поддержку APNG. В январе 2020 года Microsoft Edge стал основанным на Chromium , таким образом унаследовав поддержку APNG. Благодаря этому все основные браузеры теперь поддерживают APNG.

Рабочая группа PNG

Оригинальная спецификация PNG была создана специальной группой экспертов и энтузиастов компьютерной графики . Обсуждения и решения по формату проводились по электронной почте. Первоначальные авторы, перечисленные в RFC 2083: [15]

  • Редактор: Томас Бутелл
  • Редактор: Том Лейн
  • Авторы (в алфавитном порядке по фамилии): Марк Адлер , Томас Бутелл, Кристиан Бруншен, Адам М. Костелло, Ли Дэниэл Крокер , Андреас Дилгер, Оливер Фромм, Жан-Лу Гайи , Крис Херборт, Алекс Якулин, Нил Кеттлер, Том Лейн , Александр Леманн, Крис Лилли , Дэйв Мартиндейл, Оуэн Мортенсен, Кит С. Пикенс, Роберт П. Пул, Гленн Рандерс-Персон, Грег Рулофс, Виллем ван Шайк, Гай Шалнат, Пол Шмидт, Тим Вегнер, Джереми Воль

Формат файла

PNG-изображениепросмотрено с помощью шестнадцатеричного редактора для Ubuntu

Заголовок файла

Файл PNG начинается с восьмибайтовой сигнатуры [ 16] (см. изображение шестнадцатеричного редактора справа):

Значения ( шестнадцатеричные )Цель
89Имеет высокий бит, установленный для обнаружения систем передачи, не поддерживающих 8-битные данные , и для снижения вероятности того, что текстовый файл будет ошибочно интерпретирован как PNG или наоборот.
504E47В ASCII буквы PNG позволяют легко идентифицировать формат при просмотре в текстовом редакторе.
0D 0AКонец строки в стиле DOS (CRLF) для обнаружения преобразования конца строки DOS-Unix в данных.
1AБайт, который останавливает отображение файла в DOS при использовании типа команды — символа конца файла .
0AОкончание строки в стиле Unix (LF) для обнаружения преобразования окончания строки Unix-DOS.

«Фрагменты» внутри файла

После заголовка следует ряд фрагментов , [17] каждый из которых передает определенную информацию об изображении. Фрагменты объявляют себя критическими или вспомогательными , и программа, столкнувшаяся со вспомогательным фрагментом, который она не понимает, может спокойно его игнорировать. Эта структура слоя хранения на основе фрагментов, похожая по концепции на формат контейнера или на IFF Amiga , разработана для того, чтобы позволить расширить формат PNG, сохранив совместимость со старыми версиями — она обеспечивает прямую совместимость , и эта же структура файла (с другой сигнатурой и фрагментами) используется в связанных форматах MNG , JNG и APNG .

Кусок состоит из четырех частей: длина (4 байта, [18] big-endian ), тип/имя куска (4 байта [19] ), данные куска (длина байтов) и CRC (циклический избыточный код/контрольная сумма; 4 байта [18] ). CRC представляет собой сетевой порядок байтов CRC-32, вычисляемый по типу куска и данным куска, но не по длине.

ДлинаТип кускаДанные фрагментаКПР
4 байта4 байтаДлина байт4 байта

Типам фрагментов присваивается четырехбуквенный чувствительный к регистру тип/имя ASCII; сравните FourCC . Регистр различных букв в имени (бит 5 числового значения символа) представляет собой битовое поле , которое предоставляет декодеру некоторую информацию о природе фрагментов, которые он не распознает.

Регистр первой буквы указывает, является ли фрагмент критическим или нет. Если первая буква заглавная, фрагмент критический; если нет, фрагмент вспомогательный. Критические фрагменты содержат информацию, необходимую для чтения файла. Если декодер встречает критический фрагмент, который он не распознает, он должен прервать чтение файла или предоставить пользователю соответствующее предупреждение.

Регистр второй буквы указывает, является ли фрагмент "публичным" (в спецификации или реестре специальных публичных фрагментов) или "частным" (не стандартизированным). Верхний регистр означает публичный, а нижний регистр - частный. Это гарантирует, что имена публичных и частных фрагментов никогда не будут конфликтовать друг с другом (хотя два частных имени фрагмента могут конфликтовать).

Третья буква должна быть заглавной, чтобы соответствовать спецификации PNG. Она зарезервирована для будущего расширения. Декодеры должны обрабатывать фрагмент с третьей буквой в нижнем регистре так же, как и любой другой нераспознанный фрагмент.

Регистр четвертой буквы указывает, безопасно ли копировать фрагмент редакторам, которые его не распознают. Если строчные буквы, фрагмент можно безопасно копировать независимо от степени изменений в файле. Если заглавные буквы, его можно копировать только в том случае, если изменения не коснулись критических фрагментов.

Критические фрагменты

Декодер должен уметь интерпретировать критические фрагменты для чтения и рендеринга PNG-файла.

  • IHDRдолжен быть первым фрагментом; он содержит (в этом порядке) изображение
    • ширина (4 байта)
    • высота (4 байта)
    • битовая глубина (1 байт, значения 1, 2, 4, 8 или 16)
    • тип цвета (1 байт, значения 0, 2, 3, 4 или 6)
    • метод сжатия (1 байт, значение 0)
    • метод фильтра (1 байт, значение 0)
    • метод чередования (1 байт, значения 0 «без чередования» или 1 « чередование Adam7 ») (всего 13 байт данных). [12]

Как указано в Консорциуме Всемирной паутины , битовая глубина определяется как «количество бит на образец или на индекс палитры (не на пиксель)». [12]

  • PLTEсодержит палитру : список цветов.
  • IDATсодержит изображение, которое может быть разделено на несколько фрагментов IDAT. Такое разделение немного увеличивает размер файла, но позволяет генерировать PNG потоковым способом. Фрагмент IDAT содержит фактические данные изображения, которые являются выходным потоком алгоритма сжатия. [20]
  • IENDотмечает конец изображения; поле данных фрагмента IEND имеет 0 байт/пусто. [21]

Этот PLTEфрагмент необходим для типа цвета 3 (индексированный цвет). Он необязателен для типов цвета два и шесть (truecolor и truecolor с альфа-каналом) и не должен появляться для типов цвета 0 и 4 (оттенки серого и оттенки серого с альфа-каналом).

Вспомогательные фрагменты

Другие атрибуты изображения, которые могут храниться в файлах PNG, включают значения гаммы , цвет фона и текстовую метаинформацию . PNG также поддерживает управление цветом посредством включения цветовых профилей ICC . [22]

  • bKGDдает цвет фона по умолчанию. Он предназначен для использования, когда нет лучшего выбора, например, в автономных просмотрщиках изображений (но не в веб-браузерах; см. ниже для получения более подробной информации).
  • cHRMдает координаты цветности основных цветов дисплея и белой точки .
  • cICPопределяет цветовое пространство, передаточную функцию и матричные коэффициенты, как определено в ITU-T H.273 . [23] Он предназначен для использования с изображениями HDR без необходимости в цветовом профиле. [24]
  • dSIGпредназначен для хранения цифровых подписей. [25]
  • eXIfсохраняет метаданные Exif . [26]
  • gAMAопределяет gamma . Фрагмент gAMA содержит всего 4 байта, а его значение представляет собой значение гаммы, умноженное на 100 000; например, значение гаммы 1/3,4 вычисляется как 29411,7647059 ((1/3,4)*(100 000)) и преобразуется в целое число (29412) для хранения. [27]
  • hISTможет хранить гистограмму или общее количество каждого цвета в изображении.
  • iCCPпредставляет собой цветовой профиль ICC .
  • iTXtсодержит ключевое слово и текст UTF-8 с кодировками для возможного сжатия и переводами, отмеченными тегом языка . Расширяемая платформа метаданных (XMP) использует этот фрагмент с ключевым словом 'XML:com.adobe.xmp'
  • pHYsсодержит предполагаемый размер пикселя (или соотношение сторон пикселя); pHYs содержит «Пиксели на единицу измерения, ось X» (4 байта), «Пиксели на единицу измерения, ось Y» (4 байта) и «Определитель единицы измерения» (1 байт), всего 9 байтов. [28]
  • sBIT(значимые биты) указывают на точность цвета исходных данных; этот фрагмент содержит в общей сложности от 1 до 5 байтов, в зависимости от типа цвета. [29] [30] [31]
  • sPLTпредлагает палитру, которую можно использовать, если полный спектр цветов недоступен.
  • sRGBуказывает на то, что используется стандартное цветовое пространство sRGB ; фрагмент sRGB содержит только 1 байт, который используется для «цели рендеринга» (для цели рендеринга определены 4 значения — 0, 1, 2 и 3). [32]
  • sTERИндикатор стереоизображения для стереоскопических изображений. [33]
  • tEXtможет хранить текст, который может быть представлен в ISO/IEC 8859-1 , с одной парой ключ-значение для каждого фрагмента. «Ключ» должен быть длиной от одного до 79 символов. Разделитель — нулевой символ. «Значение» может быть любой длины, включая ноль, вплоть до максимально допустимого размера фрагмента за вычетом длины ключевого слова и разделителя. Ни «ключ», ни «значение» не могут содержать нулевой символ. Начальные или конечные пробелы также не допускаются.
  • tIMEсохраняет время последнего изменения изображения.
  • tRNSсодержит информацию о прозрачности. Для индексированных изображений он хранит значения альфа-канала для одной или нескольких записей палитры. Для полноцветных и полутоновых изображений он хранит одно значение пикселя, которое следует считать полностью прозрачным.
  • zTXtсодержит сжатый текст (и маркер метода сжатия) с теми же ограничениями, что и tEXt.

Первая строчная буква в этих фрагментах указывает на то, что они не нужны для спецификации PNG. Последняя строчная буква в некоторых фрагментах указывает на то, что их можно безопасно копировать, даже если соответствующее приложение их не понимает.

Формат пикселя

Допустимые комбинации типа цвета и глубины цвета [12]
Тип цветаКаналыБит на канал
124816
Индексированный11248
Оттенки серого1124816
Оттенки серого и альфа21632
Truecolor32448
Truecolor и альфа43264

Пиксели в изображениях PNG — это числа, которые могут быть либо индексами выборочных данных в палитре , либо самими выборочными данными. Палитра — это отдельная таблица, содержащаяся в фрагменте PLTE. Выборочные данные для одного пикселя состоят из кортежа из одного-четырех чисел. Независимо от того, представляют ли пиксельные данные индексы палитры или явные выборочные значения, числа называются каналами , и каждое число в изображении кодируется в идентичном формате.

Разрешенные форматы кодируют каждое число как беззнаковое целое число, используя фиксированное количество бит, которое в спецификации PNG называется битовой глубиной . Обратите внимание, что это не то же самое, что и цветовая глубина , которая обычно используется для обозначения общего количества бит в каждом пикселе, а не в каждом канале. Разрешенные битовые глубины суммированы в таблице вместе с общим количеством бит, используемых для каждого пикселя.

Количество каналов зависит от того, является ли изображение цветным или в оттенках серого, а также от того, имеет ли оно альфа-канал . PNG допускает следующие комбинации каналов, называемые типом цвета .

Демонстрация глубины цвета в файле PNG в битах на канал. Слева: 8 бит; Справа: 16 бит. Обратите внимание на артефакты , контрастность отрегулирована для ясности.
0 (000 2 )оттенки серого
2 (010 2 )красный, зеленый и синий: rgb/truecolor
3 (011 2 )индексированный: канал, содержащий индексы в палитре цветов
4 (100 2 )оттенки серого и альфа: уровень непрозрачности для каждого пикселя
6 (110 2 )красный, зеленый, синий и альфа

Тип цвета указан как 8-битное значение, однако используются только нижние три бита, и даже тогда разрешены только пять комбинаций, перечисленных выше. Пока тип цвета действителен, его можно рассматривать как битовое поле, как показано в соседней таблице:

Типы цветов PNG

Тип цвета
ИмяДвоичныйМаски
 АСП
0Оттенки серого0000 
2Truecolor0010цвет
3Индексированный0011цвет, палитра
4Оттенки серого и альфа0100альфа
6Truecolor и альфа0110альфа, цвет
  • битовое значение 1: данные изображения хранят индексы палитры. Это действительно только в сочетании с битовым значением 2;
  • значение бита 2: образцы изображения содержат три канала кодирования данных трихроматических цветов , в противном случае образцы изображения содержат один канал кодирования данных относительной яркости ,
  • битовое значение 4: образцы изображения также содержат альфа-канал, выраженный как линейная мера непрозрачности пикселя. Это недопустимо в сочетании с битовым значением 1.

В индексированных цветных изображениях палитра всегда хранит трихроматические цвета с глубиной 8 бит на канал (24 бита на запись палитры). Кроме того, может быть включен необязательный список 8-битных альфа-значений для записей палитры; если он не включен или короче палитры, то остальные записи палитры считаются непрозрачными. Палитра не должна содержать больше записей, чем позволяет глубина цвета изображения, но может содержать меньше (например, если изображение с 8-битными пикселями использует только 90 цветов, то ему не нужны записи палитры для всех 256 цветов). Палитра должна содержать записи для всех значений пикселей, присутствующих в изображении.

Стандарт позволяет индексированным цветным PNG-файлам иметь 1, 2, 4 или 8 бит на пиксель; изображения в оттенках серого без альфа-канала могут иметь 1, 2, 4, 8 или 16 бит на пиксель. Все остальное использует битовую глубину на канал 8 или 16. Комбинации, которые это допускает, приведены в таблице выше. Стандарт требует, чтобы декодеры могли читать все поддерживаемые цветовые форматы, но многие редакторы изображений могут создавать только небольшое их подмножество.

Прозрачность изображения

PNG предлагает множество вариантов прозрачности. Для полноцветных и полутоновых изображений можно либо объявить прозрачным одно пиксельное значение, либо добавить альфа-канал (позволяя использовать любой процент частичной прозрачности). Для палитровых изображений альфа-значения можно добавлять к записям палитры. Количество таких сохраненных значений может быть меньше общего количества записей палитры, в этом случае оставшиеся записи считаются полностью непрозрачными.

Сканирование значений пикселей для бинарной прозрачности должно выполняться до любого снижения цвета, чтобы избежать непреднамеренной прозрачности пикселей. Это, скорее всего, создаст проблему для систем, которые могут декодировать изображения с 16 битами на канал (как требуется для соответствия спецификации), но выводят только 8 бит на канал (норма для всех, кроме самых высокопроизводительных систем).

Альфа- хранилище может быть «ассоциированным» (« предварительно умноженным ») или «неассоциированным», но PNG стандартизировано [34] на «неассоциированном» («непредварительно умноженном») альфа-канале, что означает, что изображение не кодируется альфа-каналом ; выбросы, представленные в RGB, не являются выбросами на уровне пикселей. Это означает, что избыточная операция умножит выбросы RGB на альфа-канал и не сможет правильно представить выбросы и окклюзию.

Сжатие

PNG использует двухэтапный процесс сжатия:

  • предварительное сжатие: фильтрация (прогнозирование)
  • компрессия: СПУСКАТЬ

PNG использует DEFLATE , незапатентованный алгоритм сжатия данных без потерь , включающий комбинацию кодирования LZ77 и Хаффмана . Широко доступны разрешенные лицензированные реализации DEFLATE, такие как zlib .

По сравнению с форматами со сжатием с потерями, такими как JPEG, выбор настройки сжатия выше средней задерживает обработку, но часто не приводит к значительному уменьшению размера файла.

Фильтрация

Метод фильтрации PNG 0 может использовать данные в пикселях A, B и C для прогнозирования значения X.
PNG с 256 цветами, который занимает всего 251 байт с предварительной фильтрацией. То же изображение в формате GIF будет больше в тринадцать раз.

Перед применением DEFLATE данные преобразуются с помощью метода прогнозирования: для всего изображения используется один метод фильтрации , в то время как для каждой строки изображения выбирается тип фильтра для преобразования данных с целью повышения эффективности их сжатия. [35] Тип фильтра, используемый для строки сканирования, добавляется к строке сканирования для включения встроенной декомпрессии.

В текущей спецификации PNG существует только один метод фильтрации (обозначенный как метод 0), и, таким образом, на практике единственным выбором является тип фильтра, который следует применить к каждой строке. Для этого метода фильтр предсказывает значение каждого пикселя на основе значений предыдущих соседних пикселей и вычитает предсказанный цвет пикселя из фактического значения, как в DPCM . Линия изображения, отфильтрованная таким образом, часто более сжимаема, чем необработанная линия изображения, особенно если она похожа на линию выше, поскольку отличия от предсказания, как правило, будут сгруппированы вокруг 0, а не распределены по всем возможным значениям изображения. Это особенно важно при связывании отдельных строк, поскольку DEFLATE не понимает, что изображение является двумерной сущностью, и вместо этого просто видит данные изображения как поток байтов.

Существует пять типов фильтров для метода фильтрации 0; каждый тип предсказывает значение каждого байта (данных изображения до фильтрации) на основе соответствующего байта пикселя слева ( A ), пикселя выше ( B ) и пикселя выше и слева ( C ) или некоторой их комбинации, и кодирует разницу между предсказанным значением и фактическим значением. Фильтры применяются к значениям байтов, а не к пикселям; значения пикселей могут быть одним или двумя байтами или несколькими значениями на байт, но никогда не пересекать границы байтов. Типы фильтров: [36]

Тип байтаИмя фильтраПрогнозируемое значение
0НиктоНоль (чтобы необработанное значение байта прошло без изменений)
1СубБайт А (слева)
2ВверхБайт B (выше)
3СреднийСреднее значение байтов A и B , округленное в меньшую сторону
4ПаэтA , B или C , в зависимости от того, что ближе к p = A + BC

Фильтр Paeth основан на алгоритме Алана В. Паэта . [37] Сравните с версией DPCM , используемой в JPEG без потерь , и с дискретным вейвлет-преобразованием, использующим окна 1 × 2, 2 × 1 или (для предиктора Paeth) 2 × 2 и вейвлеты Хаара .

Сжатие еще больше улучшается за счет адаптивного выбора типов фильтров на построчной основе. Это улучшение и эвристический метод его реализации, обычно используемый программным обеспечением для записи PNG, были созданы Ли Дэниелом Крокером , который протестировал методы на многих изображениях во время создания формата; [38] выбор фильтра является компонентом оптимизации размера файла, как обсуждается ниже.

Если используется чересстрочная развертка, каждый этап чересстрочной развертки фильтруется отдельно, что позволяет постепенно визуализировать изображение по мере получения каждого этапа; однако чересстрочная развертка, как правило, снижает эффективность сжатия.

Переплетение

Иллюстрация переплетения Adam7 на изображении 16×16

PNG предлагает дополнительную 2-мерную 7-проходную схему чересстрочной разверткиалгоритм Adam7 . Это сложнее, чем 1-мерная 4-проходная схема GIF, и позволяет видеть более четкое изображение с низким разрешением на более ранних этапах передачи, особенно если используются алгоритмы интерполяции, такие как бикубическая интерполяция . [39]

Однако 7-проходная схема имеет тенденцию снижать сжимаемость данных больше, чем более простые схемы.

Анимация

Файл APNG (анимированный PNG) (отображается как статическое изображение в некоторых веб-браузерах )

Основной формат PNG не поддерживает анимацию. MNG — это расширение PNG, которое поддерживает; оно было разработано членами PNG Group. MNG разделяет базовую структуру и фрагменты PNG, но он значительно сложнее и имеет другую сигнатуру файла, что автоматически делает его несовместимым со стандартными декодерами PNG. Это означает, что большинство веб-браузеров и приложений либо никогда не поддерживали MNG, либо прекратили его поддержку.

Сложность MNG привела к предложению APNG разработчиками из Mozilla Foundation. Он основан на PNG, поддерживает анимацию и проще MNG. APNG предлагает откат к отображению одного изображения для декодеров PNG, которые не поддерживают APNG. Сегодня формат APNG поддерживается всеми основными веб-браузерами. [40] APNG поддерживается в Firefox 3.0 и выше, Pale Moon (все версии) и Safari 8.0 и выше. [41] В Chromium 59.0 была добавлена ​​поддержка APNG, [42] [43] за ней последовал Google Chrome. Opera поддерживала APNG в версиях 10–12.1, но поддержка прекратилась в версии 15, когда она перешла на движок рендеринга Blink ; поддержка была повторно добавлена ​​в Opera 46 (унаследована от Chromium 59). [44] Microsoft Edge поддерживает APNG с версии 79.0, когда она перешла на движок на основе Chromium.

В апреле 2007 года группа PNG решила не принимать APNG. [45] Обсуждалось несколько альтернатив, включая ANG, aNIM/mPNG, «PNG в GIF» и его подмножество «RGBA в GIF». [46] Однако в настоящее время только APNG имеет широкую поддержку.

С разработкой третьего издания спецификации PNG, которое теперь поддерживается рабочей группой PNG, [47] APNG наконец будет включен в спецификацию в качестве расширения. [48]

Примеры

Структура очень простого PNG-файла
89 50 4E 47 0D 0A 1A 0A
PNG-подпись
IHDR
Заголовок изображения
IDAT
Данные изображения
IEND
Конец изображения
Содержимое минимального PNG-файла, представляющего один красный пиксель
ШестигранникКак персонажи

89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52
00 00 00 01 00 00 00 01 08 02 00 00 00 90 77 53
DE 00 00 00 0C 49 44 41 54 08 D7 63 F8 CF C0 00
00 03 01 01 00 18 DD 8D B0 00 00 00 00 49 45 4E
44 AE 42 60 82

.PNG.... ....IHDR
..............wS
. ....ИДАТ..с....
......... ....ИЕН
Д.Б`.

Кусок IHDR
Смещение в кусокШестнадцатеричное значениеДесятичное значениеТекстЗначение
00x0D13Фрагмент IHDR имеет 13 байт контента.
40x49484452ИХДРОпределяет фрагмент заголовка
80x011Ширина изображения — 1 пиксель.
120x011Изображение высотой 1 пиксель
160x0888 бит на пиксель (на канал)
170x022Тип цвета 2 (RGB/truecolor)
180x000Метод сжатия 0 (единственно допустимое значение)
190x000Метод фильтрации 0 (единственно допустимое значение)
200x000Не чересстрочная развертка
210x907753DECRC типа и содержимого фрагмента (но не длины)
Фрагмент IDAT
Смещение в кусокШестнадцатеричное значениеЗначение
00x0CФрагмент IDAT имеет 12 байт содержимого.
40x49444154Идентифицирует фрагмент данных
80x08Метод сжатия DEFLATE с использованием окна размером 256 байт [49]
90xD7Значение ZLIB FCHECK, словарь не используется, максимальный алгоритм сжатия [49]
100x63F8CFC00000Сжатый блок DEFLATE с использованием статического кода Хаффмана, который декодируется в 0x00 0xFF 0x00 0x00 [50]
160x03010100Контрольное значение ZLIB: контрольная сумма Adler32 несжатых данных [49]
200x18DD8DB0CRC типа и содержимого фрагмента (но не длины)

Отображается в стиле шестнадцатеричных редакторов , с левой стороны байтовые значения показаны в шестнадцатеричном формате , а с правой стороны их эквивалентные символы из ISO-8859-1 с нераспознанными и управляющими символами, замененными точками. Кроме того, сигнатура PNG и отдельные фрагменты отмечены цветами. Обратите внимание, что их легко идентифицировать из-за их понятных человеку имен типов (в этом примере PNG, IHDR, IDAT и IEND).

Преимущества

Причины использовать PNG:

  • Портативность : передача данных не зависит от программной и аппаратной платформы.
  • Полнота : возможно представление полноцветных изображений, изображений в индексированных цветах и ​​изображений в оттенках серого.
  • Последовательное кодирование и декодирование : позволяет генерировать и считывать потоки данных последовательно, то есть формат потока данных используется для генерации и визуализации изображений в данный момент посредством последовательной связи.
  • Прогрессивное представление : возможность передавать потоки данных, которые изначально являются приближением всего изображения и постепенно улучшаются по мере получения потока данных.
  • Устойчивость к ошибкам передачи : корректно обнаруживает ошибки передачи потока данных.
  • Без потерь : без потерь: фильтрация и сжатие сохраняют всю информацию.
  • Эффективность : любое прогрессивное представление, сжатие и фильтрация изображений требуют эффективного декодирования и представления.
  • Сжатие : изображения можно сжимать эффективно и последовательно.
  • Простота : внедрение стандарта несложно.
  • Взаимозаменяемость : любой декодер PNG, соответствующий стандартам, может считывать все потоки данных PNG.
  • Гибкость : позволяет вносить будущие расширения и частные дополнения, не затрагивая предыдущую точку.
  • Свобода от правовых ограничений : используемые алгоритмы бесплатны и доступны.

Сравнение с другими форматами файлов

Формат обмена графическими данными (GIF)

  • На небольших изображениях GIF может обеспечить большее сжатие, чем PNG (см. раздел о размере файла ниже).
  • Для большинства изображений, за исключением приведенного выше случая, файл GIF имеет больший размер, чем индексированное изображение PNG.
  • PNG предоставляет гораздо более широкий спектр параметров прозрачности, чем GIF, включая прозрачность альфа-канала .
  • В то время как GIF ограничен 8-битным индексированным цветом , PNG обеспечивает гораздо более широкий диапазон глубины цвета, включая 24-битный (8 бит на канал) и 48-битный (16 бит на канал) truecolor , что обеспечивает большую точность цветопередачи, более плавные переходы и т. д. [51] При добавлении альфа-канала возможно использование до 64 бит на пиксель (до сжатия).
  • При конвертации изображения из формата PNG в GIF качество изображения может пострадать из-за постеризации, если изображение PNG содержит более 256 цветов.
  • GIF изначально поддерживает анимированные изображения. PNG поддерживает анимацию только через неофициальные расширения (см. раздел об анимации выше).

Изображения PNG менее широко поддерживаются старыми браузерами. В частности, IE6 имеет ограниченную поддержку PNG. [52]

JPEG

Составное изображение, сравнивающее сжатие с потерями в JPEG со сжатием без потерь в PNG: артефакты JPEG можно легко увидеть на фоне данных изображения такого типа, тогда как изображение PNG имеет сплошной цвет.

Формат JPEG (Joint Photographic Experts Group) может создавать файлы меньшего размера, чем PNG, для фотографических (и фотоподобных) изображений, поскольку JPEG использует метод кодирования с потерями, специально разработанный для данных фотографических изображений, в которых обычно преобладают мягкие, малоконтрастные переходы и некоторое количество шума или подобных нерегулярных структур. Использование PNG вместо высококачественного JPEG для таких изображений приведет к значительному увеличению размера файла с незначительным улучшением качества. Для сравнения, при хранении изображений, содержащих текст, штриховые рисунки или графику — изображений с резкими переходами и большими областями сплошного цвета — формат PNG может сжимать данные изображения лучше, чем JPEG. Кроме того, PNG сжимается без потерь, в то время как JPEG создает визуальные артефакты вокруг областей с высоким контрастом. (Такие артефакты зависят от настроек, используемых при сжатии JPG; они могут быть весьма заметны, если используется настройка низкого качества [высокого сжатия].) Если изображение содержит как резкие переходы, так и фотографические части, необходимо сделать выбор между двумя эффектами. JPEG не поддерживает прозрачность.

Сжатие с потерями JPEG также страдает от потери данных при генерации , когда многократное декодирование и повторное кодирование изображения для его повторного сохранения каждый раз приводит к потере информации, что ухудшает качество изображения. Поскольку PNG не имеет потерь, он подходит для хранения изображений, подлежащих редактированию. Хотя PNG достаточно эффективен при сжатии фотографических изображений, существуют форматы сжатия без потерь, разработанные специально для фотографических изображений, например, WebP без потерь и Adobe DNG (цифровой негатив). Однако эти форматы либо не поддерживаются широко, либо являются запатентованными. Изображение можно сохранить без потерь и преобразовать в формат JPEG только для распространения, так что потери данных при генерации не будет.

Хотя спецификация PNG явно не включает стандарт для встраивания данных изображений Exif из таких источников, как цифровые камеры, предпочтительным методом встраивания данных EXIF ​​в PNG является использование некритической вспомогательной метки фрагмента eXIf. [53]

Ранние веб-браузеры не поддерживали изображения PNG; основными форматами изображений были JPEG и GIF. JPEG обычно использовался при экспорте изображений, содержащих градиенты, для веб-страниц из-за ограниченной глубины цвета GIF. Однако сжатие JPEG приводит к небольшому размыванию градиента. Формат PNG воспроизводит градиент максимально точно для заданной битовой глубины, сохраняя при этом небольшой размер файла. PNG стал оптимальным выбором для небольших градиентных изображений, поскольку поддержка этого формата веб-браузерами улучшилась. Для отображения градиентов в современных браузерах вообще не нужны изображения, поскольку градиенты можно создавать с помощью CSS .

JPEG-LS

JPEG-LS — это формат изображений, разработанный Joint Photographic Experts Group , хотя он гораздо менее известен и поддерживается, чем другой формат JPEG с потерями, описанный выше. Он напрямую сопоставим с PNG, [ требуется разъяснение ] и имеет стандартный набор тестовых изображений. [54] На Waterloo Repertoire ColorSet, стандартном наборе тестовых изображений (не связанном с набором тестов соответствия JPEG-LS), JPEG-LS обычно работает лучше, чем PNG, на 10–15%, но на некоторых изображениях PNG работает существенно лучше, порядка 50–75%. [55] Таким образом, если оба этих формата являются вариантами, а размер файла является важным критерием, их оба следует рассматривать, в зависимости от изображения.

JPEG-XL-файл

JPEG XL — это еще один, значительно улучшенный формат без потерь или с потерями, который, к сожалению, поддерживается гораздо меньше, разработанный для замены форматов без потерь, таких как PNG. [56] JPEG XL более чем на 50% меньше JPEG, и это может произойти, пока он без потерь, поэтому он даже меньше PNG. [57] Он также поддерживает высокий динамический диапазон , широкую цветовую гамму и большую глубину цвета . [58] JPEG XL также очень эффективен при декодировании и обеспечивает плавные переходы из форматов, которые он намеревается заменить, без потерь может конвертироваться из JPEG. Он также отлично сжимает без ущерба для точности. [59]

ТИФФ

Tag Image File Format (TIFF) — это формат, который включает в себя чрезвычайно широкий спектр опций. Хотя это делает TIFF полезным в качестве общего формата для обмена между профессиональными приложениями для редактирования изображений, это делает добавление его поддержки в приложения гораздо более сложной задачей, и поэтому он слабо поддерживается в приложениях, не связанных с обработкой изображений (например, веб-браузерах). Высокий уровень расширяемости также означает, что большинство приложений предоставляют только подмножество возможных функций, что потенциально создает путаницу для пользователей и проблемы совместимости.

Наиболее распространенным универсальным алгоритмом сжатия без потерь, используемым с TIFF, является Lempel–Ziv–Welch (LZW). Этот метод сжатия, также используемый в GIF, был защищен патентами до 2003 года. TIFF также поддерживает алгоритм сжатия, используемый PNG (т. е. Compression Tag 0008 16 ' Adobe -style') со средним использованием и поддержкой приложений. TIFF также предлагает специальные алгоритмы сжатия без потерь, такие как CCITT Group IV , которые могут сжимать двухуровневые изображения (например, факсы или черно-белый текст) лучше, чем алгоритм сжатия PNG.

PNG поддерживает только непредумноженную альфа-канал [34], тогда как TIFF также поддерживает «ассоциированную» (предумноженную) альфа-канал.

ВебП

WebP — это формат, изобретенный Google , который должен был заменить PNG, JPEG и GIF. [60] Файлы WebP допускают как сжатие с потерями, так и без потерь, тогда как PNG допускает только сжатие без потерь. WebP также поддерживает анимацию, которую ранее могли выполнять только файлы GIF . [61]

Однако основные улучшения WebP по сравнению с PNG заключаются в значительном уменьшении размера файла и, следовательно, в более быстрой загрузке при встраивании в веб-сайты. Google утверждает, что изображения WebP без потерь на 26% меньше файлов PNG. [62]

WebP подвергся критике за несовместимость с различными программами редактирования изображений и сайтами социальных сетей, в отличие от PNG. [63] WebP также поддерживается не всеми веб-браузерами, что может потребовать от хостинг-провайдеров веб-изображений создания резервного изображения для отображения пользователю, что сводит на нет потенциальную экономию хранилища WebP. [61]

АВИФ

AVIF — это формат изображений, разработанный Alliance for Open Media . AVIF был разработан организацией для устранения недостатков других кодеков изображений, включая PNG, GIF и WebP . [64]

AVIF, как правило, меньше по размеру, чем WebP и PNG. [65] AVIF поддерживает анимацию, в то время как PNG — нет, и имеет более высокое качество изображения по сравнению с PNG. [66]

Однако, как и WebP, AVIF поддерживается меньшим количеством браузеров и приложений, чем PNG. [66] В частности, AVIF поддерживается наиболее используемыми браузерами: Microsoft Edge , Firefox и Google Chrome , [67] [68], но требует дополнительной загрузки для использования с Microsoft Windows . [64]

Поддержка программного обеспечения

Официальной эталонной реализацией формата PNG является программная библиотека libpng . [69] Она публикуется как свободное программное обеспечение на условиях разрешительной лицензии свободного программного обеспечения . Поэтому она обычно встречается как важная системная библиотека в свободных операционных системах.

Поддержка редактора растровой графики для PNG

Формат PNG широко поддерживается графическими программами, включая Adobe Photoshop , Corel 's Photo-Paint и Paint Shop Pro , GIMP , GraphicConverter , Helicon Filter , ImageMagick , Inkscape , IrfanView , Pixel image editor, Paint.NET и Xara Photo & Graphic Designer и многими другими (включая онлайн-платформы графического дизайна, такие как Canva ). Некоторые программы, входящие в комплект популярных операционных систем , которые поддерживают PNG, включают Microsoft 's Paint и Apple 's Photos / iPhoto and Preview , а GIMP также часто входит в комплект популярных дистрибутивов Linux .

Adobe Fireworks (ранее Macromedia ) использует PNG в качестве собственного формата файла, что позволяет другим редакторам изображений и утилитам предварительного просмотра просматривать сглаженное изображение. Однако Fireworks по умолчанию также сохраняет метаданные для слоев, анимации, векторных данных, текста и эффектов. Такие файлы не следует распространять напрямую. Вместо этого Fireworks может экспортировать изображение как оптимизированный PNG без дополнительных метаданных для использования на веб-страницах и т. д. [ необходима цитата ]

Поддержка PNG в веб-браузере

Поддержка PNG впервые появилась в 1997 году в Internet Explorer 4.0b1 (32-битная версия только для NT) и в Netscape 4.04. [70]

Несмотря на призывы Фонда свободного программного обеспечения [71] и Консорциума Всемирной паутины (W3C), [72] такие инструменты, как gif2png, [73] и такие кампании, как Burn All GIFs, [74] принятие PNG на веб-сайтах происходило довольно медленно из-за поздней и некорректной поддержки в Internet Explorer, особенно в отношении прозрачности. [75]

Совместимые с PNG браузеры включают: Apple Safari , Google Chrome , Mozilla Firefox , Opera , Camino , Internet Explorer , Microsoft Edge и многие другие. Для полного сравнения см. Сравнение веб-браузеров (поддержка форматов изображений) .

В частности, версии Internet Explorer (Windows) ниже 9.0 (выпущенные в 2011 году) имели многочисленные проблемы, которые не позволяли им правильно отображать изображения PNG. [76]

  • 4.0 вылетает при работе с большими фрагментами PNG. [77]
  • 4.0 не включает в себя функциональность для просмотра файлов .png, [78] но есть исправление реестра. [76]
  • 5.0 и 5.01 имеют сломанную поддержку OBJECT. [79]
  • 5.01 печатает палитровые изображения с черным (или темно-серым) фоном в Windows 98, иногда с радикально измененными цветами. [80]
  • 6.0 не может отображать изображения PNG размером 4097 или 4098 байт. [81]
  • 6.0 не может открыть файл PNG, содержащий один или несколько фрагментов IDAT нулевой длины. Эта проблема была впервые исправлена ​​в обновлении безопасности 947864 (MS08-024). Для получения дополнительной информации см. эту статью в базе знаний Microsoft: 947864 MS08-024: Накопительное обновление безопасности для Internet Explorer. [82]
  • 6.0 иногда полностью теряет возможность отображать PNG, но есть различные исправления. [83]
  • 6.0 и ниже имеют сломанную поддержку прозрачности альфа-канала (вместо этого будет отображаться цвет фона по умолчанию). [84] [85] [86]
  • 7.0 и ниже не могут объединять 8-битную альфа-прозрачность И непрозрачность элемента ( CSS – фильтр: Alpha (opacity=xx)) без заполнения частично прозрачных участков черным цветом. [87]
  • 8.0 и ниже имеют непоследовательную/сломанную поддержку гаммы. [76]
  • 8.0 и ниже не поддерживают цветокоррекцию. [76]

Поддержка операционных систем для иконок PNG

Значки PNG поддерживаются в большинстве дистрибутивов Linux по крайней мере с 1999 года в таких средах рабочего стола, как GNOME . [88] В 2006 году поддержка значков PNG в Microsoft Windows была представлена ​​в Windows Vista . [89] Значки PNG поддерживаются также в AmigaOS 4 , AROS , macOS , iOS и MorphOS . Кроме того, Android широко использует PNG.

Размер файла и программное обеспечение для оптимизации

Размер файла PNG может значительно различаться в зависимости от того, как он закодирован и сжат; это обсуждается и дается ряд советов в PNG: The Definitive Guide. [55]

По сравнению с GIF-файлом

По сравнению с файлами GIF , файл PNG с той же информацией (256 цветов, без вспомогательных фрагментов/метаданных), сжатый эффективным компрессором, обычно меньше изображения GIF. В зависимости от файла и компрессора PNG может варьироваться от несколько меньшего (10%) до значительно меньшего (50%) и несколько большего (5%), но редко бывает значительно больше [55] для больших изображений. Это объясняется производительностью DEFLATE PNG по сравнению с LZW GIF , а также тем, что добавленный слой предварительного сжатия предиктивных фильтров PNG учитывает двумерную структуру изображения для дальнейшего сжатия файлов; поскольку отфильтрованные данные кодируют различия между пикселями, они будут иметь тенденцию группироваться ближе к 0, а не распределяться по всем возможным значениям, и, таким образом, их будет легче сжимать с помощью DEFLATE. Однако некоторые версии Adobe Photoshop , CorelDRAW и MS Paint обеспечивают плохое сжатие PNG, создавая впечатление, что GIF более эффективен. [55]

Факторы размера файла

Размер файлов PNG различается из-за ряда факторов:

глубина цвета
Глубина цвета может варьироваться от 1 до 64 бит на пиксель.
вспомогательные фрагменты
PNG поддерживает метаданные — это может быть полезно для редактирования, но не нужно для просмотра, например на веб-сайтах.
переплетение
Поскольку каждый проход алгоритма Adam7 фильтруется отдельно, это может увеличить размер файла. [55]
фильтр
На этапе предварительного сжатия каждая строка фильтруется предиктивным фильтром, который может меняться от строки к строке. Поскольку конечный шаг DEFLATE работает с отфильтрованными данными всего изображения, оптимизировать его построчно невозможно; выбор фильтра для каждой строки, таким образом, потенциально очень изменчив, хотя эвристики существуют. [примечание 1]
сжатие
Благодаря дополнительным вычислениям компрессоры DEFLATE могут создавать файлы меньшего размера.

Таким образом, существует компромисс между размером файла между высокой глубиной цвета, максимальными метаданными (включая информацию о цветовом пространстве вместе с информацией, которая не влияет на отображение), чересстрочной разверткой и скоростью сжатия, которые все дают большие файлы с меньшей глубиной цвета, меньшим количеством или отсутствием вспомогательных фрагментов, отсутствием чересстрочной развертки и настроенной, но вычислительно интенсивной фильтрацией и сжатием. Для разных целей выбираются разные компромиссы: максимальный файл может быть лучшим для архивирования и редактирования, в то время как урезанный файл может быть лучшим для использования на веб-сайте, и аналогично быстрое, но плохое сжатие предпочтительно при многократном редактировании и сохранении файла, в то время как медленное, но высокое сжатие предпочтительно, когда файл стабилен: при архивировании или публикации. Чересстрочная развертка является компромиссом: она значительно ускоряет раннюю отрисовку больших файлов (уменьшает задержку), но может увеличить размер файла (уменьшить пропускную способность) при небольшом выигрыше, особенно для небольших файлов. [55]

Сжатие PNG с потерями

Хотя PNG — это формат без потерь, кодировщики PNG могут предварительно обрабатывать данные изображения с потерями для улучшения сжатия PNG. Например, квантование полноцветного PNG до 256 цветов позволяет использовать индексированный тип цвета для вероятного уменьшения размера файла. [90]

Программное обеспечение для редактирования изображений

Некоторые программы более эффективны при сохранении PNG-файлов, чем другие. Это связано с реализацией сжатия PNG, используемого программой.

Многие графические программы (например, программное обеспечение Preview от Apple ) сохраняют PNG с большим количеством метаданных и данных цветокоррекции, которые обычно не нужны для просмотра в Интернете . Неоптимизированные файлы PNG из Adobe Fireworks также печально известны этим, поскольку они содержат параметры, позволяющие сделать изображение редактируемым в поддерживаемых редакторах. Также CorelDRAW (по крайней мере версии 11) иногда создает PNG, которые не могут быть открыты в Internet Explorer (версии 6–8).

Производительность Adobe Photoshop при работе с файлами PNG в CS Suite улучшилась при использовании функции «Сохранить для Web» (которая также допускает явное использование PNG/8).

Adobe Fireworks по умолчанию сохраняет файлы PNG большего размера, чем многие программы. Это связано с механикой его формата сохранения : изображения, созданные функцией сохранения Fireworks, включают большие, частные фрагменты, содержащие полную информацию о слоях и векторах. Это позволяет осуществлять дальнейшее редактирование без потерь. При сохранении с помощью опции экспорта файлы PNG Fireworks могут конкурировать с файлами, созданными другими редакторами изображений, но их больше нельзя редактировать, кроме как в виде сглаженных растровых изображений. Fireworks не может сохранять оптимизированные по размеру векторные файлы PNG.

Другие известные примеры плохих компрессоров PNG:

  • Paint от Microsoft для Windows XP
  • Microsoft Picture It! Фото Премиум 9

Плохое сжатие увеличивает размер PNG-файла, но не влияет на качество изображения или совместимость файла с другими программами.

Когда глубина цвета изображения truecolor уменьшается до 8-битной палитры (как в GIF), полученные данные изображения обычно намного меньше. Таким образом, PNG truecolor обычно больше, чем GIF с уменьшенным количеством цветов, хотя PNG может хранить версию с уменьшенным количеством цветов как палитризированный файл сопоставимого размера. И наоборот, некоторые инструменты при сохранении изображений в формате PNG автоматически сохраняют их как truecolor, даже если исходные данные используют только 8-битный цвет, тем самым излишне раздувая файл. [55] Оба фактора могут привести к неправильному представлению о том, что файлы PNG больше, чем эквивалентные файлы GIF.

Инструменты оптимизации

Для оптимизации PNG-файлов доступны различные инструменты. Они делают это следующим образом:

  • (опционально) удаление вспомогательных фрагментов,
  • уменьшение глубины цвета, либо:
    • используйте палитру (вместо RGB), если изображение содержит 256 или менее цветов,
    • используйте меньшую палитру, если изображение содержит 2, 4 или 16 цветов, или
    • (опционально) безвозвратно удалить часть данных из исходного изображения,
  • оптимизация выбора фильтра построчно и
  • оптимизируем сжатие DEFLATE.

Список инструментов

  • pngcrush — старейший из популярных оптимизаторов PNG. Он допускает множественные попытки выбора фильтра и аргументов сжатия, и в конце выбирает наименьший. Эта рабочая модель используется почти в каждом оптимизаторе png.
  • advpng и похожая утилита advdef в пакете AdvanceCOMP повторно сжимают PNG IDAT. Различные реализации DEFLATE применяются в зависимости от выбранного уровня сжатия, балансируя между скоростью и размером файла: zlib на уровне 1, libdeflate на уровне 2, LZMA DEFLATE от 7-zip на уровне 3 и zopfli на уровне 4.
  • pngout был создан с помощью собственного дефлятора автора (то же самое, что и zip-утилита автора, kzip), при этом сохранив все возможности уменьшения цвета / фильтрации. Однако pngout не позволяет использовать несколько испытаний фильтров за один запуск. Предлагается использовать его коммерческую версию GUI, pngoutwin, или использовать с оболочкой для автоматизации испытаний или для повторного сжатия с помощью собственного дефлятора, сохраняя фильтр построчно. [примечание 2]
  • zopflipng также был создан с собственным дефлятором zopfli. Он имеет все оптимизирующие функции pngcrush (включая автоматизацию испытаний), предоставляя при этом очень хороший, но медленный дефлятор.

Ниже приведено простое сравнение их характеристик.

ОптимизаторУдаление кускаСнижение цветаФильтрацияПовторное использование фильтра [примечание 3]Несколько испытаний фильтров за один запускДефлятор [примечание 4]
advpngДаНет [примечание 5]0НетН/Д [примечание 6](несколько)
advdefНетНетПовторно использует предыдущий набор фильтровВсегдаН/Д(несколько)
pngcrushДаДа0–4 или адаптивныйНетДаzlib
pngoutДаДа0–4 или адаптивныйДа [примечание 2]Нетkzip
zopflipngДаДа0–4 или адаптивный с 2 ​​разными алгоритмами, или грубым способомДаДацопфли

До того, как появился zopflipng, хорошим способом на практике выполнить оптимизацию png было последовательное использование комбинации 2 инструментов для оптимального сжатия: один, который оптимизирует фильтры (и удаляет вспомогательные фрагменты), и другой, который оптимизирует DEFLATE. Хотя pngout предлагает оба, только один тип фильтра может быть указан в одном запуске, поэтому его можно использовать с инструментом-оберткой или в сочетании с pngcrush , [примечание 2] действующем как повторный дефлятор, как advdef.

Удаление вспомогательного куска

Для удаления вспомогательных фрагментов большинство инструментов оптимизации PNG имеют возможность удалять все данные цветокоррекции из файлов PNG (гамма, баланс белого, цветовой профиль ICC, стандартный цветовой профиль RGB). Это часто приводит к значительному уменьшению размера файла. Например, следующие параметры командной строки позволяют добиться этого с помощью pngcrush:

pngcrush -rem gAMA -rem cHRM -rem iCCP -rem sRGB InputFile.png OutputFile.png

Оптимизация фильтра

pngcrush, pngout и zopflipng предлагают варианты применения одного из типов фильтров 0–4 глобально (используя один и тот же тип фильтра для всех строк) или с «псевдофильтром» (под номером 5), который для каждой строки выбирает один из типов фильтров 0–4 с помощью адаптивного алгоритма. Zopflipng предлагает 3 различных адаптивных метода, включая поиск методом подбора, который пытается оптимизировать фильтрацию. [примечание 7]

pngout и zopflipng предоставляют возможность сохранять/повторно использовать [примечание 2] [примечание 8] набор построчных фильтров, присутствующих во входном изображении.

pngcrush и zopflipng предоставляют возможность попробовать разные стратегии фильтрации за один запуск и выбрать лучшую. Бесплатная версия командной строки pngout не предлагает этого, но коммерческая версия pngoutwin предлагает. [примечание 9]

Оптимизация DEFLATE

Zopfli и LZMA SDK предоставляют реализации DEFLATE , которые могут обеспечить более высокие коэффициенты сжатия , чем эталонная реализация zlib за счет производительности. AdvanceCOMP advpngи advdefможет использовать любую из этих библиотек для повторного сжатия файлов PNG. Кроме того, PNGOUT содержит собственную фирменную реализацию DEFLATE.

advpngне имеет возможности применять фильтры и всегда использует фильтр 0 глобально (оставляя данные изображения нефильтрованными); поэтому его не следует использовать там, где изображение значительно выигрывает от фильтрации. Напротив, advdefиз того же пакета не имеет дела со структурой PNG и действует только как повторный дефлятор, сохраняя любые существующие настройки фильтра.

Оптимизация иконок

Поскольку иконки, предназначенные для Windows Vista и более поздних версий, могут содержать субизображения PNG, оптимизации могут применяться и к ним. По крайней мере один редактор иконок , Pixelformer, способен выполнять специальный проход оптимизации при сохранении файлов ICO , тем самым уменьшая их размеры. FileOptimizer (упомянутый выше) также может обрабатывать файлы ICO.

Значки для macOS также могут содержать фрагменты изображений в формате PNG, однако такой инструмент недоступен. [ необходима цитата ]

Смотрите также

Пояснительные записки

  1. ^ Фильтрация используется для повышения сходства с данными, следовательно, повышения степени сжатия. Однако теоретически не существует формулы для сходства, как и абсолютной связи между сходством и компрессором, поэтому, пока не выполнено сжатие, нельзя сказать, что один набор фильтров лучше другого.
  2. ^ abcd Используйте pngout -f6 для повторного использования предыдущего набора фильтров
  3. ^ Инструменты, предлагающие такую ​​функцию, могли бы действовать как чистый ре-дефлятор файлов PNG.
  4. ^ zlib , эталонная реализация deflate, сжатие неоптимально даже на максимальном уровне. См. Zopfli , формат zip в 7-zip и pngout .
  5. ^ Advpng не только не поддерживает уменьшение цвета, но и не работает с изображениями с уменьшенным цветовым пространством.
  6. ^ Advpng может применять фильтр 0 только глобально, поэтому это не «да» и не «нет», а «N/A».
  7. ^ [pngcrush|pngout] -f ИЛИ zopflipng --filters
  8. ^ zopflipng --filters=p
  9. ^ Диалоговое окно настроек оптимизации Pngoutwin предлагает пользователю выбор стратегий фильтрации.

Ссылки

  1. ^ abc "ISO/IEC 15948:2004 – Информационные технологии – Компьютерная графика и обработка изображений – Переносимая сетевая графика (PNG): Функциональная спецификация". Международная организация по стандартизации . 3 марта 2004 г. Получено 19 февраля 2011 г.
  2. ^ ab Roelofs, Greg (29 мая 2010 г.). "История PNG". libpng . Получено 20 октября 2010 г. .
  3. ^ W3C 2003, 1 Область применения.
  4. ^ "Определение существительного PNG из Оксфордского словаря для продвинутых учащихся". Oxford Learner's Dictionaries . Получено 21 января 2018 г.
  5. ^ "Описание файла Portable Network Graphic .PNG". surferhelp.goldensoftware.com . Получено 12 августа 2022 г. .
  6. ^ Рулофс, Грег. «Обзор веб-сайта: PNG — это НЕ GIF!». people.apache.org . Получено 24 ноября 2021 г.
  7. ^ T. Boutell и др. (март 1997 г.). Спецификация PNG (переносимая сетевая графика) версии 1.0. Сетевая рабочая группа. doi : 10.17487/RFC2083 . RFC 2083. Информационный. раздел 3.
  8. ^ "Регистрация нового типа носителя image/png". IANA . 27 июля 1996 г.
  9. ^ "Официальное [sic] объявление Compu$erve о лицензировании GIF". groups.google.com . Получено 8 января 2025 г. .
  10. ^ Лимер, Эрик (30 октября 2019 г.). «GIF мертв. Да здравствует GIF» . Popular Mechanics . Получено 21 ноября 2022 г.
  11. ^ Roelofs 1999, Глава 7. История формата переносимой сетевой графики.ошибка sfn: нет цели: CITEREFRoelofs1999 ( помощь )
  12. ^ abcd W3C 2003, 11.2.2 Заголовок изображения IHDR
  13. ^ Roelofs, Greg (29 сентября 2011 г.). «Спецификация и расширения Portable Network Graphics (PNG)». libpng . Получено 15 августа 2021 г. .
  14. ^ T. Boutell и др. (март 1997 г.). Спецификация PNG (переносимая сетевая графика) версии 1.0. Сетевая рабочая группа. doi : 10.17487/RFC2083 . RFC 2083. Информационный. раздел 8.4. PNG сам по себе является строго одно-изображенным форматом. (...) В будущем может быть определен много-изображенный формат на основе PNG. Такой формат будет считаться отдельным форматом файла
  15. ^ T. Boutell и др. (март 1997 г.). Спецификация PNG (переносимая сетевая графика) версии 1.0. Сетевая рабочая группа. doi : 10.17487/RFC2083 . RFC 2083. Информационный.
  16. ^ W3C 2003, 5.2 Подпись PNG.
  17. ^ W3C 2003, 5.3 Структура фрагмента.
  18. ^ ab Laphroaig, Manul (31 октября 2017 г.). PoC или GTFO. No Starch Press. ISBN 9781593278984. Каждый фрагмент состоит из четырех частей: Длина, Тип фрагмента, Данные фрагмента и 32-битный CRC. Длина — это 32-битное целое число без знака, указывающее размер только поля Данные фрагмента
  19. ^ Laphroaig, Manul (31 октября 2017 г.). PoC или GTFO. No Starch Press. ISBN 9781593278984. Тип фрагмента — это 32-битный код FourCC, такой как IHDR, IDAT или IEND.
  20. ^ W3C 2003, 11.2.4 Данные изображения IDAT.
  21. ^ W3C 2003, 11.2.5 IEND Изображение-трейлер.
  22. ^ W3C 2003, 11.3.3.3 iCCP Встроенный профиль ICC.
  23. ^ «Спецификация PNG (третье издание), cICP Кодовые точки, независимые от кодирования, для идентификации типа видеосигнала». w3.org . 21 сентября 2023 г.
  24. ^ «Добавление поддержки HDR-изображений в формат PNG». Группа сообщества W3C Color on the Web. 3 мая 2023 г.
  25. Томас Копп (17 апреля 2008 г.). «Цифровые подписи PNG: Спецификация расширения».
  26. ^ "Расширения спецификации PNG 1.2, версия 1.5.0". ftp-osl.osuosl.org .
  27. ^ W3C 2003, 11.3.3.2 gAMA Гамма изображения.
  28. ^ W3C 2003, 11.3.5.3 pHY Физические размеры пикселей.
  29. ^ W3C 2003, 11.3.3.4 sBIT Значимые биты.
  30. ^ "Спецификация PNG (переносимая сетевая графика) \ Версия 1.0". w3.org . Получено 30 мая 2022 г. .4.2.6. sBIT Значимые биты, всего 13 байт — типы цвета 2 и 3 в сумме составляют 6 байт
  31. ^ Roelofs 2003, Значимые биты (sBIT) «Изображения в оттенках серого являются самыми простыми; sBIT тогда содержит один байт, указывающий количество значимых бит в исходных данных»
  32. ^ «Спецификация PNG: Характеристики фрагментов».
  33. ^ "Новости PNG за 2006 год". Libpng.org.
  34. ^ ab "Спецификация PNG: Обоснование". w3.org .
  35. ^ W3C 2003, 9 Фильтрация.
  36. ^ «Алгоритмы фильтрации». Спецификация PNG .
  37. ^ Paeth, Alan W. (1991). Arvo, James (ред.). «Сжатие файлов изображений стало проще». Graphics Gems 2. Academic Press, Сан-Диего: 93– 100. doi :10.1016/B978-0-08-050754-5.50029-3. ISBN 0-12-064480-0. Значок закрытого доступа
  38. ^ Крокер, Ли Дэниел (июль 1995 г.). «PNG: переносимый сетевой графический формат». Журнал доктора Добба . 20 (232): 36–44 .
  39. ^ "Введение в PNG". nuwen.net . Получено 20 октября 2010 г. .
  40. ^ "Могу ли я использовать... Таблицы поддержки для HTML5, CSS3 и т. д.". caniuse.com . Получено 6 февраля 2021 г. .
  41. ^ «iOS 8 и iPhone 6 для веб-разработчиков и дизайнеров: следующая эволюция Safari и собственных веб-приложений». mobilexweb.com. 17 сентября 2014 г. Получено 24 сентября 2014 г.
  42. ^ scroggo (14 марта 2017 г.). "chromium / chromium / src / 7d2b8c45afc9c0230410011293cc2e1dbb8943a7". chromium.googlesource.com . Получено 31 марта 2017 г. .
  43. ^ chrome-cron; и др. (27 марта 2017 г.). "chromium / chromium / src / 59.0.3047.0..59.0.3053.0". chromium.googlesource.com . Получено 31 марта 2017 г. .
  44. ^ "Dev.Opera — Что нового в Chromium 59 и Opera 46". dev.opera.com . Получено 11 сентября 2022 г. .
  45. ^ "Голосование не удалось: APNG 20070405a". 20 апреля 2007 г. Архивировано из оригинала 3 февраля 2008 г.
  46. ^ "Сравнение предложений по анимации Группы PNG + тестовое программное обеспечение". xs4all.nl . Архивировано из оригинала 24 января 2009 г.
  47. ^ "PNG Третье издание, Объяснение". W3C GitHub . 24 мая 2023 г.
  48. ^ «Спецификация PNG (третье издание), APNG: покадровая анимация». w3.org . 21 сентября 2023 г.
  49. ^ abc P. Deutsch; JL. Gailly (май 1996 г.). Спецификация формата сжатых данных ZLIB версии 3.3. Сетевая рабочая группа. doi : 10.17487/RFC1950 . RFC 1950. Информационный.
  50. ^ P. Deutsch (май 1996 г.). Спецификация формата сжатых данных DEFLATE версии 1.3. Сетевая рабочая группа. doi : 10.17487/RFC1951 . RFC 1951. Информационный.
  51. ^ "Базовое введение в возможности PNG". Libpng.org . Получено 20 октября 2010 г. .
  52. ^ "GIF, PNG, JPG. Какой из них использовать?". Sitepoint.com. 3 августа 2009 г. Получено 20 октября 2010 г.
  53. ^ "Расширения спецификации PNG 1.2, версия 1.5.0" . Получено 5 мая 2020 г. .
  54. ^ "T.87: Сжатие без потерь и почти без потерь неподвижных изображений с непрерывным тоном – Базовый уровень". Международный союз электросвязи . Получено 20 марта 2011 г.
  55. ^ abcdefg Roelofs 2003, Глава 9. Сжатие и фильтрация
  56. ^ "Формат файла JPEG XL". Библиотека Конгресса . Получено 1 января 2025 г.
  57. ^ «Почему Apple использует JPEG XL и что это значит для ваших фотографий». Petapixel . Получено 1 января 2025 г. .
  58. ^ "JPEG XL Image Encoding". Библиотека Конгресса . Получено 1 января 2025 г.
  59. ^ "Как JPEG XL сравнивается с другими кодеками изображений". Cloudinary . Получено 1 января 2025 г. .
  60. ^ "WebP". www.loc.gov . 13 апреля 2023 г. Получено 22 августа 2024 г.
  61. ^ ab Ellis, Matt (22 февраля 2021 г.). «Что такое WebP? Плюсы и минусы этого формата изображений следующего поколения». 99designs . Получено 22 августа 2024 г. .
  62. ^ "Формат изображения для Интернета | WebP". Google для разработчиков . Получено 22 августа 2024 г.
  63. Уэс Фенлон (28 апреля 2023 г.). «Вот почему вам теперь приходится иметь дело со столькими раздражающими веб-приложениями». PC Gamer . Получено 22 августа 2024 г.
  64. ^ ab "AVIF: Встречайте новый уровень формата файлов изображений". Alliance for Open Media . 8 ноября 2023 г. Получено 26 сентября 2024 г.
  65. ^ "PNG против AVIF: решающая битва форматов изображений | Coconut©". www.coconut.co . Получено 26 сентября 2024 г. .
  66. ^ ab "AVIF против WebP: 4 ключевых различия и как выбрать". Cloudinary . Получено 26 сентября 2024 г. .
  67. ^ "PNG alpha transparent | Могу ли я использовать... Таблицы поддержки для HTML5, CSS3 и т. д.". caniuse.com . Получено 26 сентября 2024 г. .
  68. ^ "Формат изображения AVIF | Могу ли я использовать... Таблицы поддержки для HTML5, CSS3 и т. д.". caniuse.com . Получено 26 сентября 2024 г. .
  69. ^ "libpng" . Получено 13 июля 2013 г. .
  70. ^ «Использование изображений PNG для отображения данных». Центр водных наук Орегона. 16 февраля 2006 г.
  71. ^ "Почему на веб-страницах GNU нет файлов GIF". Операционная система GNU . 16 декабря 2008 г.
  72. ^ "PNG Fact Sheet". Консорциум Всемирной паутины . 7 октября 1996 г.
  73. ^ "Страница ресурсов для gif2png 2.5.11". catb.org .
  74. ^ «Сжечь все GIF-файлы». burnallgifs.org .
  75. ^ "Прозрачность PNG в Internet Explorer". PC Magazine . 5 октября 2004 г.
  76. ^ abcd "Браузеры с поддержкой PNG". 14 марта 2009 г.
  77. ^ «Проводник Windows аварийно завершает работу, когда я нажимаю на файл Fireworks PNG для его просмотра». Adobe Systems . 5 июня 2007 г.
  78. ^ «Невозможно просмотреть изображения .png с помощью Internet Explorer 4.0». База знаний Microsoft .
  79. ^ «PNG-файлы, находящиеся внутри тега объекта, печатаются как негативное изображение». База знаний Microsoft .
  80. ^ «Изображения PNG печатаются неправильно в Internet Explorer 5.01». База знаний Microsoft .
  81. ^ «Некоторые изображения PNG не могут просматриваться в Internet Explorer 6». База знаний Microsoft .
  82. ^ «Невозможно использовать Internet Explorer 6 для открытия файла PNG, содержащего один или несколько фрагментов IDAT нулевой длины». База знаний Microsoft .
  83. ^ «Часто задаваемые вопросы PNG».
  84. ^ "PhD: Портативная сетевая графика теряет прозрачность в веб-браузере". База знаний Microsoft .
  85. ^ «Файлы PNG не отображают прозрачность в Internet Explorer». База знаний Microsoft .
  86. ^ Ловитт, Майкл (21 декабря 2002 г.). «Кросс-браузерная переменная непрозрачность с PNG: реальное решение». A List Apart . Архивировано из оригинала 18 августа 2011 г. Получено 21 июля 2009 г.
  87. ^ "IE7 alpha transparent PNG + opacity". Channel 9 . Архивировано из оригинала 27 августа 2011 . Получено 23 января 2009 .
  88. ^ Фулбрайт, Майкл (1999). "GNOME 1.0 Library Roadmap". Архивировано из оригинала 30 января 2010 года . Получено 19 декабря 2007 года .
  89. ^ "Windows Vista – Icons". OOne . 2007. Архивировано из оригинала 11 ноября 2007 . Получено 12 ноября 2007 .
  90. ^ "PNG может быть форматом с потерями". Pngmini.com . Получено 1 февраля 2014 г. .

Дальнейшее чтение

  • Рулофс, Грег (апрель 1997 г.). "Linux Gazette: История формата Portable Network Graphics (PNG)". Linux Journal . 1997 (36es). Specialized Systems Consultants, Inc. ISSN  1075-3583.
  • Рулофс, Грег (2003). PNG: Полное руководство (2-е изд.). O'Reilly Media. ISBN 1-56592-542-4.
  • «Спецификация переносимой сетевой графики (PNG)» (Второе издание). W3C . 10 ноября 2003 г.
  • Спецификация PNG
  • PNG Домашний сайт
  • Домашняя страница libpng
  • История PNG Грега Рулофса
  • Тестовые встроенные изображения PNG
  • RFC2083
  • Дополнительная информация о цветокоррекции PNG
  • GD-библиотека для генерации динамических PNG-файлов с помощью PHP
  • PNG Adam7 переплетение
  • Кодирование веб-оболочек в файлы PNG: кодирование удобочитаемых данных внутри блока IDAT.
Получено с "https://en.wikipedia.org/w/index.php?title=PNG&oldid=1272615360"