Введение
Portable Network Graphics (PNG, официально произносится /p//ɪ//ŋ/ PING, разговорно произносится , /p//iː//ɛ//n/'/dʒ//iː/ PEEenJEE) — это растровый графический формат файла, поддерживающий сжатие данных без потерь. PNG был разработан как улучшенная, не запатентованная замена формата Graphics Interchange Format (GIF) — неофициально, аббревиатура PNG расшифровывалась как рекурсивная фраза "PNG's not GIF". PNG поддерживает изображения на основе палитры (с палитрами 24-битного RGB или 32-битного RGBA), оттенки серого (с или без альфа-канала для прозрачности) и полноцветные изображения RGB или RGBA, не использующие палитру. Рабочая группа PNG разработала этот формат для передачи изображений в интернете, а не для профессиональной полиграфической графики; поэтому цветовые пространства, отличные от RGB, такие как CMYK, не поддерживаются. Файл PNG содержит одно изображение в расширяемой структуре блоков, кодирующих основные пиксели и другую информацию, такую как текстовые комментарии и проверки целостности, описанные в RFC 2083. Файлы PNG имеют расширение ".png" и MIME-тип "image/png". PNG был опубликован как информационный RFC 2083 в марте 1997 года и как стандарт ISO/IEC 15948 в 2004 году, а также использует расширение png. Среди других предложений, реализованных позднее, были алгоритм сжатия deflate и поддержка 24-битного цвета, отсутствие последнего в GIF также послужило мотивацией для команды создать собственный формат файла. Группа получила название PNG Development Group, и по мере расширения обсуждения стала использовать рассылку, связанную с форумом CompuServe. В 2001 году разработчики PNG опубликовали формат Multiple image Network Graphics (MNG) с поддержкой анимации. MNG получил умеренную поддержку приложений, но недостаточную среди основных веб-браузеров и не использовался веб-дизайнерами или издателями. В 2008 году некоторые разработчики Mozilla опубликовали формат Animated Portable Network Graphics (APNG) с аналогичными целями. APNG — это формат, который изначально поддерживается браузерами Gecko и Presto, а также часто используется для миниатюр на PlayStation Portable от Sony (с использованием стандартного расширения файла PNG). В 2017 году браузеры на основе Chromium добавили поддержку APNG. В январе 2020 года Microsoft Edge перешел на Chromium, унаследовав поддержку APNG. Таким образом, теперь все основные браузеры поддерживают APNG.
Portable Network Graphics (PNG, officially pronounced /p//ɪ//ŋ/ PING, colloquially pronounced ,/p//iː//ɛ//n/'/dʒ//iː/ PEEenJEE) is a raster graphics file format that supports lossless data compression. PNG was developed as an improved, non patented replacement for Graphics Interchange Format (GIF)—unofficially, the initials PNG stood for the recursive acronym "PNG's not GIF". PNG supports palette based images (with palettes of 24 bit RGB or 32 bit RGBA colors), grayscale images (with or without an alpha channel for transparency), and full color non palette based RGB or RGBA images. The PNG working group designed the format for transferring images on the Internet, not for professional quality print graphics; therefore, non RGB color spaces such as CMYK are not supported. A PNG file contains a single image in an extensible structure of chunks, encoding the basic pixels and other information such as textual comments and integrity checks documented in RFC 2083. PNG files have the ". png" file extension and the "image/png" MIME media type. PNG was published as an informational RFC 2083 in March 1997 and as an ISO/IEC 15948 standard in 2004. and also the png extension. Other suggestions later implemented included the deflate compression algorithm and 24 bit color support, the lack of the latter in GIF also motivating the team to create their file format. The group would become known as the PNG Development Group, and as the discussion rapidly expanded, it later used a mailing list associated with a CompuServe forum. In 2001, the developers of PNG published the Multiple image Network Graphics (MNG) format, with support for animation. MNG achieved moderate application support, but not enough among mainstream web browsers and no usage among web site designers or publishers. In 2008, certain Mozilla developers published the Animated Portable Network Graphics (APNG) format with similar goals. APNG is a format that is natively supported by Gecko and Presto based web browsers and is also commonly used for thumbnails on Sony's PlayStation Portable system (using the normal PNG file extension). In 2017, Chromium based browsers adopted APNG support. In January 2020, Microsoft Edge became Chromium based, thus inheriting support for APNG. With this all major browsers now support APNG.
Переплетение
PNG предлагает необязательную двухмерную схему интерлированного отображения с семью проходами – алгоритм Adam7. Она более сложна, чем одномерная схема GIF с четырьмя проходами, и позволяет увидеть более четкое изображение с низким разрешением на ранних этапах передачи, особенно при использовании алгоритмов интерполяции, таких как бикубическая интерполяция. Однако схема с семью проходами, как правило, снижает степень сжатия данных по сравнению с более простыми схемами.
Анимация
Основной формат PNG не поддерживает анимацию. MNG — это расширение PNG, которое поддерживает анимацию; он был разработан участниками PNG Group. MNG использует базовую структуру и блоки PNG, но значительно сложнее и имеет другую сигнатуру файла, что автоматически делает его несовместимым со стандартными декодерами PNG. Это означает, что большинство веб-браузеров и приложений либо никогда не поддерживали MNG, либо прекратили его поддержку. Сложность MNG привела к предложению APNG разработчиками Mozilla Foundation. APNG основан на PNG, поддерживает анимацию и проще, чем MNG. APNG обеспечивает возможность отображения одиночного изображения для декодеров PNG, которые не поддерживают APNG. Сегодня формат APNG поддерживается всеми основными веб-браузерами. APNG поддерживается в Firefox 3.0 и выше, Pale Moon (все версии) и Safari 8.0 и выше. Chromium 59.0 добавил поддержку APNG, за которым последовал Google Chrome. Opera поддерживала APNG в версиях 10–12.1, но поддержка была прекращена в версии 15 после перехода на движок рендеринга Blink; поддержка была восстановлена в Opera 46 (унаследована от Chromium 59). Microsoft Edge поддерживает APNG с версии 79.0, после перехода на движок на основе Chromium. В апреле 2007 года PNG Group решила не включать APNG в стандарт. Рассматривались различные альтернативы, включая ANG, aNIM/mPNG, "PNG в GIF" и его подмножество "RGBA в GIF". Однако в настоящее время только APNG имеет широкую поддержку. С разработкой третьего издания спецификации PNG, которое сейчас поддерживается рабочей группой PNG, APNG, наконец, будет включен в спецификацию как расширение.
JPEG
Формат 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. Ранние веб-браузеры не поддерживали изображения PNG; основными форматами изображений были JPEG и GIF. JPEG часто использовался при экспорте изображений с градиентами для веб-страниц из-за ограниченной цветовой глубины GIF. Однако сжатие JPEG приводит к небольшому размытию градиента. Формат PNG воспроизводит градиент максимально точно для заданной глубины цвета, сохраняя при этом небольшой размер файла. PNG стал оптимальным выбором для небольших изображений с градиентами по мере улучшения поддержки формата веб-браузерами. Для отображения градиентов в современных браузерах не требуется использование изображений, поскольку градиенты можно создавать с помощью CSS.
JPEG-LS
JPEG LS — это формат изображения, разработанный Объединенной группой экспертов по фотографии, однако он гораздо менее известен и поддерживается, чем другой формат JPEG с потерями, описанный выше. Он напрямую сопоставим с PNG и имеет стандартный набор тестовых изображений. При использовании набора Waterloo Repertoire ColorSet, представляющего собой стандартный набор тестовых изображений (не связанный с набором тестовых изображений для проверки соответствия JPEG LS), JPEG LS обычно показывает результаты на 10–15% лучше, чем PNG, но в некоторых случаях PNG значительно превосходит JPEG LS, примерно на 50–75%. Таким образом, если оба этих формата доступны и размер файла является важным фактором, их следует рассматривать в зависимости от конкретного изображения.
ТИФФ
Формат файла изображений с тегами (TIFF) – это формат, включающий в себя чрезвычайно широкий спектр возможностей. Это делает TIFF полезным в качестве универсального формата для обмена данными между профессиональными приложениями для редактирования изображений, но одновременно усложняет добавление поддержки этого формата в приложения, не предназначенные для обработки изображений (например, веб-браузеры). Высокая расширяемость также означает, что большинство приложений поддерживают лишь часть доступных функций, что может приводить к путанице пользователей и проблемам совместимости. Наиболее распространенным универсальным алгоритмом сжатия без потерь, используемым с TIFF, является Lempel–Ziv–Welch (LZW). Этот метод сжатия, также применяемый в GIF, был защищен патентами до 2003 года. TIFF также поддерживает алгоритм сжатия, используемый PNG (т.е. тег сжатия 000816 'Adobe style') со средней степенью использования и поддержкой в приложениях. TIFF также предлагает специализированные алгоритмы сжатия без потерь, такие как CCITT Group IV, которые могут более эффективно сжимать двухканальные изображения (например, факсы или черно-белый текст), чем алгоритм сжатия PNG. PNG поддерживает только альфа-канал без предварительного умножения. Он распространяется как свободное программное обеспечение на условиях разрешительной лицензии. Поэтому он часто встречается в качестве важной системной библиотеки в свободных операционных системах.
Поддержка графического редактора битмапов для 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 Paint и Photos/iPhoto и Preview от Apple, при этом GIMP часто поставляется в комплекте с популярными дистрибутивами Linux. Adobe Fireworks (ранее разработанный Macromedia) использует PNG как собственный формат файла, что позволяет другим редакторам изображений и программам предварительного просмотра отображать растровое изображение. Однако по умолчанию Fireworks также сохраняет метаданные для слоев, анимации, векторных данных, текста и эффектов. Распространять такие файлы напрямую не следует. Вместо этого Fireworks может экспортировать изображение в виде оптимизированного PNG без лишних метаданных для использования на веб-страницах и т.п.
Поддержка веб-браузера для PNG
Поддержка PNG впервые появилась в 1997 году в Internet Explorer 4.0b1 (32-битный только для NT) и в Netscape 4.04. Несмотря на призывы Фонда свободного программного обеспечения и Консорциума Всемирной паутины (W3C), такие инструменты, как gif2png, и кампании, такие как Burn All GIFs, внедрение PNG на веб-сайтах было довольно медленным из-за поздней и некорректной поддержки в Internet Explorer, особенно в отношении прозрачности. В число браузеров, совместимых с PNG, входят: Apple Safari, Google Chrome, Mozilla Firefox, Opera, Camino, Internet Explorer, Microsoft Edge и многие другие. Полное сравнение см. в разделе «Сравнение веб-браузеров (поддержка форматов изображений)». Особенно версии Internet Explorer (Windows) ниже 9.0 (выпущенные в 2011 году) имели многочисленные проблемы, которые мешали им правильно отображать изображения PNG. Версия 4.0 аварийно завершает работу при обработке больших фрагментов PNG. В версии 4.0 отсутствует функциональность для просмотра PNG-файлов, но существует исправление для реестра. Версия 5.01 печатает изображения с палитрой с черным (или темно-серым) фоном в Windows 98, иногда с радикально измененными цветами. Версия 6.0 не может отображать изображения PNG размером 4097 или 4098 байт. Версия 6.0 не может открыть PNG-файл, содержащий один или несколько IDAT-блоков нулевой длины. Эта проблема была впервые исправлена в обновлении безопасности 947864 (MS08 024). Дополнительную информацию можно найти в статье в базе знаний Microsoft: 947864 MS08 024: Кумулятивное обновление безопасности для Internet Explorer. Версия 6.0 иногда полностью теряет способность отображать PNG, но существуют различные исправления. Версии 6.0 и ниже имеют некорректную поддержку прозрачности альфа-канала (вместо этого отображается цвет фона по умолчанию). Версии 7.0 и ниже не могут одновременно использовать 8-битную альфа-прозрачность и непрозрачность элемента (CSS – filter: Alpha(opacity=xx)) без заливки частично прозрачных областей черным цветом. Версии 8.0 и ниже имеют непоследовательную/некорректную поддержку гаммы. В 2006 году в Microsoft Windows была добавлена поддержка значков PNG в Windows Vista. Значки PNG поддерживаются в AmigaOS 4, AROS, macOS, iOS и MorphOS. Кроме того, Android активно использует PNG.
Размер файла и программное обеспечение для оптимизации
Размер файла PNG может значительно варьироваться в зависимости от способа кодирования и сжатия; это обсуждается, и ряд советов приводится в книге «PNG: Полное руководство». Сжатие. При дополнительных вычислениях компрессоры DEFLATE могут создавать файлы меньшего размера. Таким образом, существует компромисс между высокой глубиной цвета, максимальными метаданными (включая информацию о цветовом пространстве, а также информацию, не влияющую на отображение), интерлейсингом и скоростью сжатия – все это приводит к увеличению размера файла, – и меньшей глубиной цвета, меньшим количеством или отсутствием дополнительных чанков, отсутствием интерлейсинга, а также настроенной, но вычислительно сложной фильтрацией и сжатием. Для разных целей выбираются разные компромиссы: файл максимального размера может быть оптимальным для архивирования и редактирования, а облегченный файл – для использования на веб-сайте. Аналогично, быстрое, но слабое сжатие предпочтительнее при многократном редактировании и сохранении файла, в то время как медленное, но эффективное сжатие предпочтительнее, когда файл стабилен – при архивировании или публикации. Интерлейсинг – это компромисс: он значительно ускоряет первоначальную отрисовку больших файлов (улучшает время отклика), но может увеличить размер файла (снизить пропускную способность) с незначительной выгодой, особенно для небольших файлов.
Оптимизация DEFLATE
Zopfli и LZMA SDK предоставляют реализации DEFLATE, которые могут достигать более высоких степеней сжатия, чем эталонная реализация zlib, но при этом требуют больших затрат производительности. Инструменты advpng и advdef из пакета AdvanceCOMP могут использовать любую из этих библиотек для повторного сжатия PNG-файлов. Кроме того, PNGOUT содержит собственную, запатентованную реализацию DEFLATE. advpng не позволяет применять фильтры и всегда использует фильтр 0 глобально (оставляя данные изображения без фильтрации); поэтому его не следует использовать, если фильтрация значительно улучшает сжатие изображения. В отличие от него, advdef из того же пакета не работает со структурой PNG и выполняет только повторное сжатие, сохраняя существующие настройки фильтров.
Оптимизация икон
Поскольку значки, предназначенные для Windows Vista и более поздних версий, могут содержать PNG-подкартинки, оптимизации могут быть применены и к ним. По крайней мере один редактор значков, Pixelformer, способен выполнять специальный проход оптимизации при сохранении файлов ICO, тем самым уменьшая их размер. FileOptimizer (упомянутый выше) также может обрабатывать файлы ICO. Значки для macOS также могут содержать PNG-подкартинки, однако подобного инструмента пока нет в наличии.