Представлен формат анимированных изображений XNG, совместимый с существующими браузерами

Джаспер Пьер (Jasper St. Pierre), участвующий в работе над проектами GNOME и Wayland, рассказал о создании нового формата изображений XNG, позиционируемого как улучшенная альтернатива GIF для распространения анимации в Web. По мнению Джаспера GIF является отличным форматом для анимации, но он не лишён недостатков, таких как применение старого алгоритма сжатия LZW, ограниченная цветовая палитра и проблемы с использование старых изображений в новых местах. Конкурирующие с GIF форматы APNG и MNG имеют проблемы с повсеместным распространением их поддержки. Для решения этих проблем разработан формат XNG, который из коробки уже поддерживается современными web-браузерами (проверено в Firefox и Chrome), при том, что специально поддержку нового формата в браузеры никто не добавлял. Достаточно вставить на страницу тег «img src=myanimation.xng» и анимированное изображение будет показано, как при указании обычного GIF. На первый взгляд в подобной поддержке усматривается подвох. Но если загрузить один из таких файлов и посмотреть его начинку становится всё понятно.

Файл XDG представляет собой HTML-код, сжатый при помощи gzip. При обнаружении gzip-архива браузер автоматически его распаковывает и разбирает содержимое. Внутри файла представлен SVG-блок, состоящий из набора изображений в формате JPEG, каждое из которых соответствует одному кадру в анимации. Данные каждого изображения упакованы «inline» с указанием данных внутри тега image в кодировке base64 (image A: href=«data: image/jpeg; base64,…»). По умолчанию все блоки с изображениями указаны с флагом «visibility=hidden», т.е. не показываются. Отображение кадров производится через набор тегов «set» с установкой межкадровой задержки через атрибут «dur» и поочерёдной смены атрибутов «visible» и «hidden».

Таким образом в XNG по сути является эмуляцией через SVG анимированного JPEG и может работать в большинстве браузеров без необходимости установки плагинов или подключения JavaScript-библиотек. Потери из-за использования кодировки base64 хорошо компенсируются благодаря применению сжатия gzip. В частности, потери от base64 составляют в среднем 33%, после сжатия файл уменьшается примерно на 34% за счёт дополнительного сжатия обилия html-тегов (распакованный файл занимает 7536 Кб, а после сжатия gzip — 4986 Кб).

©  OpenNet