Как появился GIF — графический формат, захвативший интернет
Недавно от последствий коронавируса скончался инженер ПО Стив Уилхайт. Даже если вы никогда не слышали о нем, то, скорее всего, пользовались одной из самых знаменитых его разработок — изображениями в формате GIF. Сегодня это визуальный межнациональный язык для общения в интернете, с помощью которого обычно обмениваются короткими и беззвучными анимациями, видео и мемами. Однако изначально он предназначался не для этих целей.
Дарья Сидорова
История создания
В 1987 году Уилхайт работал инженером ПО в CompuServe — главном поставщике онлайн-услуг до появления America Online в 1990-х годах. Он разработал GIF по запросу руководителя CompuServe Александра «Сэнди» Тревора.
Интересный факт. Самым известным вкладом Тревора в развитие CompuServe стал не GIF. В 1980 году он также придумал CB Simulator — первый компьютерный чат для общения в реальном времени. Этот проект он написал за выходные.
В то время в онлайн-сервисах, таких как CompuServe, появлялось больше графики, а у производителей компьютеров (Apple, Commodore и IBM) были собственные типы изображений. «Мы не хотели размещать изображения в 79 различных форматах», — объясняет Тревор.
Несмотря на то, что «Всемирная паутина» (World Wide Web) и цифровые камеры еще не существовали, работа над форматом изображений, который стал известен как JPEG, уже велась. Однако он не был оптимизирован под потребности CompuServe. К примеру, биржевые диаграммы и графики погоды не отображались должным образом.
Читайте по теме: История дискеты: от идеи до иконки
CompuServe требовался тип файла для изображений, который не только хорошо смотрится, но и быстро скачивается — в то время считались продвинутыми dial-up модемы со скоростью всего 2400 бит/с.
Dial-up — это сервис, позволяющий с помощью модема и телефонной сети общего пользования подключаться к удаленному компьютеру или сети.Читая технический журнал, Уилхайт наткнулся на обсуждение эффективного алгоритма сжатия LZW, названного в честь его создателей — Авраама Лемпеля, Яакова Зива и Терри Велча. Он оказался идеальной основой для будущей разработки CompuServe, позволив формату упаковать как можно больше информации в как можно меньшее количество байт.
Интересный факт. Спустя время компьютерный гигант Unisys, получивший патент на LZW, пригрозил судебным иском компаниям, использовавшим его. В результате было заключено лицензионное соглашение с CompuServe, и появился беспатентный формат изображений PNG.
Сферы применения и развитие GIF
GIF (graphics interchange format, формат для обмена изображениями) был официально представлен 15 июня 1987 года.
Технология использовалась в CompuServe Information Manager (CIM) — более визуальной версии ПО, заменившей оригинальный текстовый интерфейс сервиса. GIF также был универсальным форматом, позволяющим хранить несколько изображений. С его помощью создавались как мини-фильмы, так и статические изображения.
Формат распространился за пределы CompuServe. Сначала он появился в первом графическом веб-браузере Mosaic, а затем и в Netscape Navigator — этот браузер подарил GIF-файлам возможность воспроизводиться в бесконечном цикле.
По мере развития интернета GIF-изображения некоторое время казались пережитком прошлого. Однако истечение срока патента на GIF и появление таких сервисов, как Reddit, Twitter и Tumblr, подарили формату вторую жизнь. Его технические ограничения, например палитра из 256 цветов, стали его отличительной особенностью.
Формат популярен до сих пор и поддерживается крупнейшими онлайн-сервисами. Некоторым компаниям даже удалось на нем заработать, например Giphy — огромному хранилищу GIF-изображений, которое Facebook приобрела в 2020 году за $400 млн.
Другие достижения Уилхайта
В 2013 году Уилхайт получил награду за жизненные достижения (lifetime achievement award) от международной интернет-премии Webby Awards. Ее вручил основатель Tumblr Дэвид Карп. Однако Тревор подчеркивает, что GIF — далеко не единственная разработка Уилхайта, который, по его мнению, был «компьютерным гением».
К моменту создания GIF Уилхайт уже в одиночку написал версии языков программирования Fortran и BASIC для CompuServe, а также систему управления базами данных.
Затем он разработал для компании протокол Host Micro Interface. С его помощью ПО CIM могло связываться с мейнфреймами (большими универсальными ЭВМ) CompuServe независимо от того, какую вычислительную платформу использовал клиент. «По сути, это был графический браузер», как утверждает Тревор.
К слову, споры о том, как произносить название GIF — «гиф» или «джиф» — длились десятилетия и, вероятно, продолжатся. Тем не менее Уилхайт и Тревор утверждали, что верен лишь второй вариант.
Источник.
Фото на обложке: Nonchanon / Shutterstock
Подписывайтесь на наш Telegram-канал, чтобы быть в курсе последних новостей и событий!
GIF, PNG или JPG? Данная статья представляет собой краткий обзор трех основных графических форматов, применяющихся в Интернет. В расчет не был взят флэш (SWF), поскольку для его просмотра требуется плагин, да и формат это векторный, а не растровый. Для наглядности приведем табличку, в которой охарактеризованы все три рассматриваемых нами формата.
Из приведенной выше таблицы мы можем выделить следующее: GIF или PNG-8 наилучшим образом подходят для сохранения деталей изображения (при работе в цветовом диапазоне, охватывающем 256 цветов) и для веб-графики, содержащей текст. JPEG (он же JPG) наилучшим образом подходит для фотографов, поскольку обладает малым размером файла и широким цветовым диапазоном. . GIF подходит для простой анимации (про PNG в данном случае не говорим, поскольку он анимации не поддерживает). PNG-24, несмотря на большой размер файла, является неплохим вариантом, если вы не хотите потерять в качестве изображения (удаляет детали и добавляет шумы на фотографию). Можно без проблем использовать JPEG с низким уровнем компрессии, если вы рассчитываете показывать фотографии для пользователей с «быстрым Интернетом», поскольку в этом случае, несмотря на увеличение размера файла, вы получите изображения хорошего качества. Итак, резюмируем. PNG-8 годится для простых изображений при их публикации в Интернет. JPEG подойдет для работы с фотоснимками, PNG-24 также пригоден для работы с ними, но в этом случае вы получите больший размер файла по сравнению с JPG. Для всего остального в Интернет годится GIF. Доказываем эмпирически Можно долго рассуждать на тему, какой из форматов лучше, но наиболее правильным будет посмотреть, как они работают на практике — этим мы и займемся. Возьмем три разных по содержанию изображения и проверим их. Итак, первым испытуемым изображением будет фото креста. Для сравнения форматов использовалась команда File > Safe for Web в Photoshop CS2. Как мы можем убедиться из рисунка, первое изображение, которое помечено как Original, имеет наилучшее качество и наибольший размер (еще бы, ведь это же исходник:)). Тут его обходит даже PNG 24, но учитывайте, что JPG здесь указан оригинальный, а значит, уровень компрессии был наименьший — если вы выберете High для формата Jpeg в настройках диалогового окна Safe for Web, то размер будет совсем другой, а качество на глаз не хуже. Увеличим изображения, чтобы увидеть различия в компрессии разными форматами. Отсюда можно сделать вывод, что наиболее приближенный к оригиналу результат дает PNG-24, но вот файл он урезает менее чем на 50%, в то время как JPEG-файл довольно высокого качества (80) — более чем на 90%. Рассмотрим другие уровни сжатия JPEG-формата. Оптимальным вариантом между размером и качеством в данном случае будет JPEG с уровнем компрессии 60. Осталось взглянуть «вблизи» на GIF и PNG- 8. Здесь мы видим незначительное преимущество в конечном размере файла и качества картинки формата PNG-8 перед GIF. В то же время оба формата уступают JPEG как по качеству, так и по размеру файла. Таким образом, при подготовке изображений к публикации в Интернет для фотографий рациональнее будет использовать JPEG с качеством 60 — использование более низкого уровня качества уменьшит размер файла, но испытывать удовольствие от созерцания такой картинки вы не будете. Совет: Дабы хоть как-то упомянуть о других форматах, скажу, что, если вы хотите сохранить файл без дефектов от компрессии, то сохраняйте его либо в RAW, либо в PSD, либо в Tiff. А если вам нужно показать файл в Сети с минимальными потерями в качестве, но оптимальным весом, то смело выбирайте JPEG с качеством 100% — тогда никаких видимых дефектов никто не обнаружит. JPEG, GIF, PNG и логотипы Теперь, когда мы знаем, какой формат использовать для фотографий, рассмотрим, почему для логотипов (их публикации в Сети) лучше использовать PNG-8:). JPEG, GIF, PNG и фон Осталось оценить, как воздействуют на типичные фоновые изображения, применяемые веб-мастерами для своих сайтов, вышеуказанные форматы. Разница в качестве между форматами в данном случае минимальна, поэтому особое внимание следует уделить размеру конечного файла, и здесь за явным преимуществом побеждает JPEG с качеством 60. Итоги Для рисованных изображений, не содержащих анимации и прозрачности, наилучшим вариантом будет использование PNG-8, в противном случае — Gif. Если изображение является фотографией или на нем преобладают фотоэлементы — используйте JPEG. Использование PNG-24 не имеет никакого смысла, так как в этом вы не найдете оптимума между качеством и размером по сравнению с тем же JPEG (даже с качеством 100). Сергей Топорков, http://www.cc-studio.ru/ |
Формат GIF: прошлое, настоящее и будущее
Что такое формат GIF? Краткая история
Graphics Interchange Format (GIF) — это формат сжатого изображения, первоначально разработанный Стивом Уилхайтом в 1987 году. Он использует алгоритм сжатия Lempel-Ziv-Welch (LZW), метод сжатия без потерь (что означает, что он не ухудшает качество изображения).
GIF обычно допускают до 8 бит на пиксель на изображение и до 256 цветов. Напротив, более продвинутый формат JPEG может отображать до 16 миллионов цветов, что очень близко к пределу возможностей человеческого глаза.
GIF был одним из основных достижений на заре Интернета, поскольку пропускная способность и возможности устройства были очень ограничены. Сжатие GIF позволило передавать изображение через Интернет с приемлемой производительностью.
В начале 1990-х годов спецификация GIF89a добавила возможность объединять множество изображений или кадров в один файл и отображать их последовательно для создания анимированного клипа или короткого видео. Это превратило GIF в формат видео. Как и в исходном формате GIF, количество цветов ограничено до 256 на кадр. В 1995 эта возможность была добавлена в браузер Netscape Navigator, что привело к широкому использованию сжатых анимированных GIF-файлов.
Сегодня GIF по-прежнему широко используются. GIPHY, онлайн-база данных и поисковая система для GIF-файлов, имеет более 250 миллионов активных пользователей и была куплена Facebook примерно за 400 миллионов долларов. Whatsapp поддерживает использование анимированных GIF-файлов, и ежедневно через приложение WhatApp отправляется более 70 миллионов GIF-файлов.
В этой статье:
- Формат файла GIF: как работает GIF
- Для чего используются GIF-файлы?
- Формат GIF: плюсы и минусы
- Автоматизация GIF-файлов и анимированных GIF-файлов с помощью Cloudinary
Формат файла GIF: как работает GIF
Файлы GIF описывают логический экран с графической областью фиксированного размера. Этот экран может содержать одно, несколько изображений или вообще не содержать их. Файл GIF может содержать одно изображение, заполняющее весь логический экран, или может делить экран на отдельные изображения меньшего размера. Эти изображения могут функционировать как кадры анимации в анимированных файлах GIF, но они не обязаны заполнять весь логический экран.
Файл GIF начинается с заголовка фиксированной длины, например, GIF87a или GIF89a. Он предоставляет версию файла и логический дескриптор экрана (также фиксированной длины), определяющий логические размеры экрана в пикселях и дополнительные характеристики. Дескриптор может указать, существует ли глобальная таблица цветов (GCT), за которым следует описание размера, если оно присутствует.
Затем файл GIF разбивается на различные сегменты, представленные однобайтовым часовым:
- Изображение — начинается с 0x2C и запятой ASCII
- Блок расширения — начинается с 0x21 и восклицательного знака ASCII.
- Трейлер — имеет 1-байтовое значение 0x3B и точку с запятой ASCII (это должен быть последний байт файла)
Компонент изображения начинается с дескриптора изображения фиксированной длины, который указывает, присутствует ли локальная таблица цветов (и ее размер). Ниже приведены данные изображения с одним байтом, обеспечивающим ширину незакодированного символа (в битах) — минимальная ширина должна быть 2 бита. Далее идет связанный список с подблоками, определяющими данные, закодированные LZW.
Блоки расширения расширяют определение 87a, используя предопределенный механизм из спецификации 87a. Каждый блок состоит из часового и другого байта, определяющего тип расширения, за которым следует связанный список с подблоками для данных расширения. Блок расширения, изменяющий изображение, должен предшествовать сегменту файла, содержащему соответствующее изображение. Например, расширения графического элемента управления могут указывать необязательные значения времени задержки анимации и цвета прозрачного фона, но они должны быть рядом с затронутым изображением.
Блоки расширения и данные изображения используют связанные списки, состоящие из нескольких подблоков. Каждый подблок начинается с одного байта, указывающего количество байтов данных, следующих за ним в подблоке (до 255). Каждая последовательность субблоков заканчивается пустым (0-байтовым) субблоком.
Эта файловая структура позволяет выполнять синтаксический анализ, даже если декодер не понимает некоторые части файла. GIF-файлы, помеченные 87a, могут включать в себя блоки расширения — идея состоит в том, чтобы декодер читал и отображал файлы, игнорируя функции в расширениях, которые он не понимает.
Для чего используются GIF-файлы?
GIF-файлы имеют множество применений, как личных, так и профессиональных:
- Маркетинг — GIF-файлы обеспечивают простой и легкий механизм продвижения товаров и услуг. GIF-изображения и анимацию можно использовать для обмена изображениями брендов, создания рекламных баннеров и даже для быстрого анимированного предварительного просмотра того, как работают продукты и их преимущества.
- Обмен информацией — GIF-файлы можно использовать для предоставления графиков и диаграмм с привлекательными анимационными эффектами, чтобы помочь пользователям лучше понять сложную информацию. Анимированные GIF-файлы можно использовать для создания пошаговых руководств, которые легковесны и доступны для просмотра на любом устройстве.
- Взаимодействие с социальными сетями — GIF-файлы используются для создания анимированных ответов на обсуждения в социальных сетях и добавления юмора в сообщения в блогах, позволяя брендам улучшать отношения с клиентами и создавать более тесную связь с потребителями, предпочитающими цифровые технологии.
Формат GIF: плюсы и минусы
Преимущества GIF:
- Небольшой размер файла — GIF обеспечивают относительно небольшой размер файла по сравнению с другими форматами изображений. Их можно загружать быстрее без ущерба для качества, и они особенно подходят для сред с ограниченной пропускной способностью и вычислительными ресурсами.
- Прозрачный фон — как обычные, так и анимированные GIF-файлы поддерживают прозрачный фон. Это позволяет комбинировать изображения GIF с фоновыми цветами, изображениями или анимацией для создания инновационного веб-дизайна.
- Простая в использовании анимация — анимированные GIF-файлы легко создавать и использовать практически на любом устройстве. Это может помочь создателям и владельцам веб-сайтов повысить качество обслуживания своей аудитории.
Недостатки GIF:
- Ограниченная цветовая схема — GIF-файлы и анимированные GIF-файлы поддерживают только палитру из 256 цветов, что делает их менее привлекательными и детализированными, чем другие форматы изображений. В некоторых случаях изображение может выглядеть слегка неровным или пиксельным.
- Невозможно редактировать — анимированный GIF содержит кадры и анимацию, закодированные в реальном файле, и не может быть отредактирован. Чтобы изменить анимированный GIF, вы должны воссоздать его из исходных данных. Другие форматы изображений и анимации позволяют редактировать изображение или видео без его повторного создания.
- Тяжелый формат по сравнению с другими форматами анимации — хотя анимированные GIF имеют преимущества, они имеют больший размер файла, чем другие оптимизированные форматы видео. Добавление большого количества анимированных GIF-файлов на веб-страницы может замедлить их загрузку. Для повышения производительности рекомендуется использовать видео в формате HTML5 вместо анимированного GIF.
Автоматическое преобразование GIF в современные форматы изображений с помощью Cloudinary
GIF — широко используемый формат, но он имеет неэффективное сжатие, что означает больший размер файла и медленную загрузку страницы. Было бы здорово, если бы вы могли сохранить свои старые GIF-изображения, но предоставлять их пользователям в форматах следующего поколения, которые в разы меньше?
Поскольку разные браузеры поддерживают разные форматы изображений, лучшим решением для оптимизации времени доставки и экономии полосы пропускания является предоставление наилучшего формата в соответствии с браузером, используемым каждым из ваших посетителей. Это именно то, что Cloudinary делает с функцией под названием «f_auto».
Cloudinary — это облачная платформа для управления изображениями. Вы можете загружать GIF или любые другие изображения (и видео тоже) в Cloudinary (регистрация бесплатна). С этого момента вы можете показывать GIF-изображение, используя динамический URL-адрес. Когда вы используете параметр «f_auto» в URL-адресе, он автоматически преобразует изображение в наилучший возможный формат для текущего браузера пользователя.
Как работает динамическое преобразование формата (f_auto)?
f_auto выполняет автоматический выбор формата в зависимости от запрашивающего браузера — например, изображение может быть доставлено в формате AVIF, WebP или JPEG-2000. Если исходное изображение представляет собой анимированный GIF, f_auto автоматически преобразует его в анимированный WebP, который намного легче и быстрее.
Если браузер не поддерживает ни один из оптимизированных форматов, возвращаемых функцией f_auto, изображение доставляется в формате, указанном в расширении файла.
Живая демонстрация автоматического преобразования из GIF в современные форматы файлов
Возьмем пример изображения обуви в масштабе ниже. Исходный формат GIF (98 КБ) довольно тяжелый. Используя f_auto, мы можем доставить это изображение в формате AVIF (14,6 КБ), WebP (16,1 КБ) или JPEG-2000 (21,0 КБ) в клиентский браузер.
На самом деле изображение ниже уже загружено в ваш браузер как один из этих современных форматов и , а не как GIF (при условии, что вы используете текущий браузер).
https://res.cloudinary.com/demo/image/upload/c_scale,w_500/f_auto/docs/shoes.gif
Следующие шаги:
- Узнайте больше о функциях оптимизации изображений Cloudinary.
- Зарегистрируйте бесплатную учетную запись Cloudinary и начните оптимизировать и преобразовывать свои изображения уже сегодня.
Graphics Interchange Format (GIF) — Programming Web Graphics with Perl и GNU Software [Книга]
В начале этой главы я задал пять вопросов о GIF-файл формат. Что ж, прежде чем мы углубимся во внутреннюю работу GIF формате, вот несколько ответов:
Почему GIF со 129 цветами не меньше, чем GIF с 256 цвета?
Это связано с тем, что количество записей в цвет таблица не хранится непосредственно в файле GIF; это на самом деле вычисляется из числа битов, используемых для представления каждого индекса в стол. Общее количество записей в таблице цветов равно вычисляется путем возведения 2 в степень числа битов на запись; таким образом, если количество битов, используемых на индекс, равно 8, существует максимум из 256 записей в таблице (2 8 ). А 129-цветная палитра требует 8 бит на запись (поскольку 2 7 = 128), что означает, что 256-цветный будет выделена палитра, даже если фактически используются только 129 цветов.
Может GIF с несколькими изображениями имеют более одного прозрачный цвет?
Да, каждое изображение в последовательности из нескольких изображений может иметь собственное локальное палитра, которая может содержат свой собственный индекс прозрачного цвета. Прозрачный индекс для таблица цветов определена в Расширение управления графикой (описано позже). Согласно строгому толкованию Согласно спецификации GIF допускается только один блок графического управления на изображение, поэтому каждое изображение может иметь свой уникальный прозрачный цвет.
Какова максимальная глубина цвета GIF?
Максимум цвет глубина GIF составляет 256 цветов, потому что каждый пиксель представлен как один байт, который может быть индексом не более 2 8 = 256 цветов.
Как программа-декодер узнает, что файл является GIF?
Первые 3 байта файла GIF всегда являются шестнадцатеричной строкой. «0x47 0x49 0x46», что является строкой «GIF» в ASCII-символы. Байты 4-6 представляют собой либо шестнадцатеричную строку «0x38 0x37 0x61» или «0x38 0x39 0x61», что либо «87a» или «89a» в ASCII, в зависимости от используемая версия кодировки. К сожалению, некоторые приложения (например, определенные веб-браузеры) определяют содержимое файла исключительно по расширение, используемое в имени файла.
Как сделать файл с несколькими изображениями как можно меньшего размера?
Это сложный вопрос, но один из способов — убедиться, что ваше программное обеспечение для обработки изображений использует глобальные палитры, когда цвет таблицы могут использоваться более чем одним изображением. Каждое изображение может иметь свое собственная локальная палитра, что (для 256-цветной палитры) может добавить 768 байт на палитру. На самом деле это не так уж и много, но каждый бит имеет значение. Так же Формат GIF позволяет указать смещение (и выбрать метод «удаления») для каждого изображения в файле; размер файл можно уменьшить, удалив лишние данные (либо создание ограничивающей рамки вокруг измененной области и обрезка остальные, или анализируя изображение попиксельно и устанавливая неизмененные пиксели в прозрачные) и позволяя базовым кадрам показать через. Пример приведен в главе 9., а Gimp (описанный в главе 7) предоставляет Animation Optimizer, который автоматизирует эту технику.
Формат файла GIF довольно легко декодировать. Спецификация не лучшее описание формата файла общего назначения. Например, формат каждого типа блока непостоянен, что делает его немного сложнее разобрать. Стандартная единица измерения полей в файле GIF. это байт, хотя в нескольких случаях GIF использует упакованный байт структура для хранения нескольких полей в одном байте. Из-за эти структурные решения GIF не имеет больших возможностей для роста как формат файла. Тем не менее, это отличная и надежная спецификация. как есть. По факту, CompuServe имеет признал PNG официальным преемником GIF, поэтому не будет быть какие-либо официальные версии GIF, по крайней мере, не от CompuServe.
Файл GIF всегда начинается с трехбайтной подписи. «GIF» и заканчивается байтом (в шестнадцатеричном формате) «3B», что указывает на конец потока данных. встроенного нет проверка ошибок для определения того, были ли данные в файле поврежден или нет. Подпись является частью заголовок блок информации.
Блок заголовка
Блок заголовка GIF-файла содержит подпись, что идентифицирует его как GIF версии 87a или 89a и блок дескриптора логического экрана , который содержит информацию о минимальные требования устройства, необходимые для отображения изображения как задумал создатель. Заголовок также содержит информацию о глобальная таблица цветов, включенная в файл, если таковая имеется. Заголовок 13 байт, состоящий из следующих полей:
- Подпись (3 байта)
Всегда GIF.
- Версия (3 байта)
Всегда 87a или 89а.
- Ширина экрана и высота экрана (по 2 байта)
Минимальные размеры экрана, необходимые на устройстве отображения для правильно визуализировать изображение без масштабирования под размер экрана. Эти поля часто устанавливаются в для изображений общего назначения.
- Информация таблицы цветов (1 байт)
Следующий байт описывает атрибуты глобальной таблицы цветов. восемь битов в этом байте содержат следующие поля:
- Биты 0-2
Количество битов, используемых для каждой записи в таблице цветов, минус один; если таблица цветов имеет 256 записей, для каждой записи требуется 8-битный индекс, поэтому это поле будет содержать 7 (111 в двоичном формате). Этот номер используется для вычислить количество записей в таблице цветов.
- Бит 3
Этот бит устанавливается в 1, если элементы в таблице отсортированы по порядку уменьшения встречаемости на изображении.
- Биты 4-6
Число из до 7, указывая значащие биты на выборку каждого цвета в стол, минус один.
- Бит 7
Флаг глобальной таблицы цветов, который равен 1, если файл содержит таблица цветов.
- Цвет фона (1 байт)
Байт, содержащий индекс цвета в глобальной таблице цветов. для использования в качестве цвета границы и фона файла.
Блок глобальной таблицы цветов
Файл GIF может дополнительно содержать глобальный таблица цветов. Если это так, таблица будет сразу следовать за заголовком в потоке данных (т. начать с 14 байта). Эта таблица цветов будет содержать 2, 4, 8, 16, 32, 64, 128 или 256 записей и займет от 6 до 768 байт. Каждый элемент таблицы цветов состоит из трех байтов: по одному на каждый из красная, зеленая и синяя составляющие цвета.
Каждый блок Image (описан ниже) также может содержать свою собственную локальную таблицу цветов, которая будет иметь приоритет над Глобальная таблица цветов. Если каждый блок изображения имеет свой локальный цвет table, файлу не нужна глобальная таблица цветов. Если файл делает не имеет глобальной таблицы цветов и не имеет локальных таблиц цветов, изображение будет отображаться с использованием настроек приложения по умолчанию. таблица цветов с непредсказуемыми результатами. Локальные таблицы цветов имеют той же формы, что и глобальная таблица цветов.
Спецификация GIF предполагает, что первые два элемента цвета таблица может быть черной (0) и белой (1), но это не обязательно всегда дело.
Блок(и) изображения
GIF файл может содержать неограниченное количество изображений. Каждое изображение сохраняется в отдельном блоке, состоящем из двух-трех частей: Локальный дескриптор изображения , необязательный Локальная таблица цветов и сжатый Данные изображения .
Дескриптор локального изображения
Дескриптор локального изображения всегда состоит из 10 байтов, содержащих размеры изображения и информацию о том, какую таблицу цветов следует использование и способ хранения данных изображения. Поля локального изображения Блок дескриптора:
- Разделитель (1 байт)
Всегда шестнадцатеричное значение 2C, которое идентифицирует это как блок локального дескриптора изображения.
- Слева, Сверху (по 2 байта)
Каждый из них является числом в диапазоне до 65 535, которые указывают координаты x, y в кадре изображения при котором левый верхний угол изображения должен быть смещен, когда он отображается. См. пример прыгающего мяча в главе 9.чтобы увидеть, как эти поля могут быть использованы эффективно уменьшить размер мультиизображения GIF.
- Ширина, высота (по 2 байта)
Эти поля обеспечивают ширину и высоту изображения в пикселях.
- Информация о цвете (1 байт)
Последний байт дескриптора локального изображения содержит 8 бит описание следующих полей (начиная с наименее значимого бит):
- Бит 0
Этот бит устанавливается в 1, если блок изображения содержит локальную таблицу цветов. который следует использовать при рендеринге изображения.
- Бит 1
Этот бит установлен в 1, если данные изображения хранятся в чересстрочном формате. формат.
- Бит 2
Этот бит установлен в 1, если локальная таблица цветов отсортирована в порядке уменьшение встречаемости.
- Биты 3-4
Эти биты зарезервированы для использования в будущих версиях GIF.
- Биты 5-7
Количество битов, используемых для каждой записи в локальной таблице цветов.
Местная таблица цветов
Местная Таблица цветов имеет ту же форму, что и глобальная таблица цветов, т. е. от 2 до 256 записей однобайтовых триплетов для каждого значения RGB. Если немного дескриптора локального изображения установлено на 0, локального цвета нет таблице, и данные изображения будут сразу же следовать за дескриптором блокировать.
Данные изображения
Данные изображения для каждого изображения всегда хранится в сжатом формате LZW. Он не сохраняется как непрерывный поток закодированных LZW данных, а скорее как произвольное количество более короткие подблоки длиной от 1 до 255 байт. Эти подблоки каждый начинается с байта счетчика, который является количеством байтов в подблок, за которым следуют закодированные данные. Каждый из подблоки должны быть отправлены декодеру LZW по отдельности, прежде чем они собираются для формирования данных декодированного изображения. Счетный байт указывает конец блока данных изображения.
После того, как субблоки были прочитаны и декодированы, мы должны знать, пиксели результирующего блока данных изображения сохраняются в чересстрочной или нечересстрочной формы. Каждое значение пикселя сохраняется как один байт в декодированном блоке данных, независимо от размера таблица цветов. Если данные хранятся в нечересстрочной форме, они могут считываться линейно, причем каждая строка сканирования читается последовательно после предыдущий. Если данные чересстрочные, они должны быть прочитаны в соответствии с алгоритм чересстрочной развертки, описанный ранее в этой главе.
Блок(и) расширения
Спецификация GIF89a добавляет четыре расширения блоки в исходный формат GIF87a. Два таких блока расширения используются для реализации общих функций веб-графики, таких как прозрачность и анимированные петли. Четыре блока расширения Управление графикой , Заявка , Комментарий , и Расширения обычного текста . Из них мы рассмотрим расширение управления графикой и расширение приложения, которые используются в веб-графике. Расширение обычного текста не используется в приложения для веб-графики. Расширение комментария часто используется для хранить информацию об авторских правах для изображения, но обычно игнорируются веб-клиентами.
Блок расширения может появиться в любом месте файла GIF между Глобальная таблица цветов (если есть) и трейлер. Все расширения начинаться с байта идентификатора, который всегда равен 0x21, чтобы идентифицировать блок в качестве блока расширения. Далее следует тип расширения байт, который указывает тип расширения. Коды для Расширения управления графикой и приложения — 0xF9 и 0xFF, соответственно.
Расширение управления графикой
Расширение управления графикой содержит информация, которая может сообщить приложению, как поступать с прозрачность изображения и как избавиться от изображений, когда отображение мультиизображения GIF. Он имеет длину 8 байт и содержит семь полей:
- Ввод (1 байт)
Этот байт всегда равен 0x21, что указывает на блок расширения.
- Метка расширения (1 байт)
этот байт всегда равен 0xF9, указывая на расширение управления графикой.
- Размер блока (1 байт)
Это всегда 0x04, так как есть еще четыре байта информации перед терминатором блока расширения.
- Управляющая информация (1 байт)
Этот упакованный байт состоит из следующих трех полей:
- Бит 0
Флаг прозрачного цвета. Это 1, если изображения, на которые ссылается этот блок должен содержать прозрачный цвет.
- Бит 1
Пользовательский ввод разрешен. Этот флаг не реализован веб-браузерами.
- Биты 2-4
Метод утилизации. Это число от 0 до 4, которое указывает способ приложение должно отображать следующее изображение в файле с несколькими изображениями:
- 0
Не указано
- 1
Do not dispose between frames
- 2
Overwrite frame with background color from header
- 3
Overwrite with previous frame
- Bits 5-7
Reserved .
- Время задержки (2 байта)
Это поле содержит число сотых долей секунды, отображаемое на дисплее. клиент должен подождать, прежде чем отображать следующее изображение в мультиизображении последовательность. Это позволяет очень точно контролировать время задержки, которое может Быть из до 655,35 секунд.
- Индекс прозрачного цвета (1 байт)
Если бит прозрачности установлен, цвет с этим индексом должен быть сделать прозрачным при рендеринге изображения (т. е. оно не должно быть нарисовано). Этот индекс применяется к текущей таблице цветов. Так и будет продолжать быть прозрачным индексом для каждого изображения до тех пор, пока другой Расширение управления графикой отключает прозрачность или изменяет индекс.
- Терминатор расширения (1 байт)
Это всегда 0.
Расширение приложения
заявка Блок расширения позволяет настраивать GIF-файлы для конкретных целей. Приложения. Netscape воспользовался этой функцией, чтобы дополнить блок управления графикой с блоком расширения приложения, который сообщит веб-браузеру, сколько раз отображать последовательность изображения в анимированном GIF перед остановкой. Это стало известно как Расширение цикла Netscape а может и так быть частью спецификации GIF (хотя это не так). Это иронично, потому что спецификация GIF специально отмечает, что GIF был пока не предназначен в качестве платформы для доставки анимаций Модификация Netscape сделала GIF де-факто стандартом анимации в Интернете.
Циклическое расширение Netscape соответствует формату общего расширение приложения и выглядит следующим образом:
- Ввод (1 байт)
Этот байт всегда равен 0x21, что указывает на блок расширения.
- Метка расширения (1 байт)
Этот байт всегда равен 0xFF, что указывает на расширение приложения.
- Размер блока (1 байт)
Это всегда 0x0B, потому что есть еще одиннадцать полей информация перед терминатором блока расширения.
- Идентификатор (8 байт)
Это удобочитаемая строка из 8 символов. Для зацикливания Netscape расширение, это поле всегда «NETSCAPE».
- Код аутентификации приложения (3 байта)
Это поле содержит 3-байтовый код, который можно использовать для уникального идентифицируйте приложение, которое создало файл.