Автор Уварова Елена.

Раздел3.
Другие разделы:

| 1. Формат GIF. Применение и возможности
| 2. Стандарты GIF87a и GIF89a. Особенности и характеристики
| 4. Создание анимаций
| 5. Оптимизация анимированных GIF-файлов

Файл GIF89a состоит из блоков, расположенных в определенной последовательности.
Выделяют блоки трех типов:
Управляющие блоки: заголовок, описание логического экрана, управление графическими расширениями, признак конца - определяют, как будут обрабатываться изображения;
Блоки изображения: изображение, текст, описание палитры - содержат данные для самого изображения;
Блоки управления расширением: комментарии, прикладные расширения - никак не влияют на изображение, но могут обрабатываться прикладными программами по их усмотрению. Среди подобных блоков особо следует выделить прикладной блок Netscape Loop - он присутствует практически в каждой анимации. Если браузер видит этот блок, он проигрывает анимацию столько, сколько в нем указано раз, или бесконечно.

Общая схема следования этих блоков приблизительно такова:

- Заголовок - GIF87a или GIF89a - определяет формат файла.
- Описание логического экрана (задаются размер экрана, на который "претендует" данный файл).
- Описание глобальной палитры (необязательно, но крайне желательно).
- Произвольное количество блоков изображения (в том числе текстовых), или пар блоков <управление графическими расширениями - изображение>. Блок управления графическим расширением может содержать в себе указание на локальную палитру, расположение на логическом экране, задержку и способ удаления изображения, и оказывает влияние только на следующий непосредственно за ним блок изображения.
- Завершитель (признак конца).

Блоки управления расширением могут располагаться где угодно, кроме как:

- До описания глобальной палитры (если оно есть) или до описания логического экрана.
- Между блоком управления и соответствующим ему блоком изображения.
- После признака конца.

Также, если Вы хотите поместить в ваш файл расширение Netscape Loop, то этот блок должен следовать непосредственно за глобальной палитрой.
Схематично структуру файла можно представить следующим образом:

Название | Длина (в байтах) | Содержимое файла | Примечание
--- | --- | --- | ---
Заголовок файла
Признак GIF | 3 | 47 49 46 | GIF
Номер версии | 3 | 38 37 61 | 87a
Ширина экрана | 2 | 0320 | 800
Высота экрана | 2 | 02 58 | 600
Информация о цвете | 1 | Р7 | число цветов и прочее
Фон | 1 | 00
0 | 1 | 00
Глобальная 256- цветная палитра | 3 * число цветов | 5955 | палитра может отсутствовать
Изображение № 1
Признак картинки | 1 | 2С | Символ- разделитель изображения (00101100-',')
Координаты картинки:
по оси Х | 2 | 0000 | 0
по оси Y | 2 | 0000 | 0
Ширина картинки | 2 | 0320 | 800
Высота картинки | 2 | 02 58 | 600
Спец. информация | 2 | 08 07 | наличие палитр и прочее
Палитра картинки 256-цветная палитра | 3 * число цветов |  | палитра может отсутствовать
Данные картинки | переменная |  |
Изображение № 2
…
Терминатор | 1 | 3B | обязателен (00111011 - ';')

Наличие в начале файла специальной "подписи" указывает, что последующие данные являются потоком данных изображения в формате GIF. Эта "подпись" состоит из следующих шести символов: G I F 8 7 a

Дескриптор экрана описывает общие параметры для всех последующих изображений в формате GIF. Он определяет размеры пространства изображения или требуемого логического экрана, существование информации о таблице цветов и "глубине" экрана.
Пятый байт дескриптора экрана (Информация о цвете) имеет следующую структуру:

| M = , за дескриптором следует глобальная таблица цветов cr + 1 = число битов цветового разрешения pixel+1 = число бит/пиксель в изображении
Фон - цветовой индекс фона экрана (из глобальной таблицы цветов или из таблицы по умолчанию)

Значение 'pixel' определяет число цветов в изображении. Диапазон значений 'pixel' составляет от 0 до 7 (1-8 бит). Это транслируется в диапазон от 2 (черно-белые изображения) до 256 цветов. Бит 3 в байте 5 зарезервирован (должен быть нулевым).

Глобальная таблица цветов является необязательной и рекомендуется для изображений, где требуется точная передача цветов. На существование этой таблицы указывает поле 'M' в байте 5 дескриптора экрана. Цветовая таблица может быть также связана с каждым изображением в GIF-файле. Флаг 'M' в дескрипторе конкретного изображения обычно равен 0. Если глобальная таблица цветов присутствует, ее определение следует непосредственно за дескриптором экрана. Каждый элемент цветовой таблицы состоит из трех байтов, значения которых описывают соответственно относительную интенсивность красного, зеленого и синего цветов.

Структура блока цветовой таблицы:

1 | Значение красного для цвета 0
2 | Значение зеленого для цвета 0
3 | Значение синего для цвета 0
4 | Значение красного для цвета 1
5 | Значение зеленого для цвета 1
6 | Значение синего для цвета 1
... | Продолжение для остальных цветов
|  | Получаемое значение каждого пикселя при высвечивании изображения будет соответствовать ближайшему доступному цвету из цветовой таблицы дисплея. Цветовые компоненты представляют собой значение относительной интенсивности от нулевой (0) до полной (255). Белый цвет - (255,255,255), черный - (0,0,0).

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

| M = 0 использовать глобальную таблицу цветов, игнорировать 'pixel' M = 1 далее следует локальная таблица цветов, использовать 'pixel' I = 0 изображение отформатировано в последовательном порядке I = 1 изображение отформатировано в порядке переплетения pixel+1 = число бит/пиксель в данном изображении
Описание положения и размеров экрана должно быть находиться внутри матрицы, определенной в дескрипторе экрана. Нет необходимости, чтобы изображение полностью заполняло весь экран.

Локальная таблица цветов необязательна. Если установлен бит 'M' байта 10 в дескрипторе изображения, то вслед за дескриптором изображения следует локальная таблица цветов, которая относится только к последующему изображению. Поле 'pixel' байта 10 в дескрипторе изображения используется если указана локальная таблица цветов. Она определяет не только размер пикселя (число битов в нем), но число элементов последующей цветовой таблицы.

Формат самого изображения определен как серия значений номеров пикселей, которые образуют изображение. Пиксели запоминаются слева направо последовательно по строкам изображения. По умолчанию строки записываются последовательно, сверху вниз. В том случае, если установлен бит 'I' в байте 10 дескриптора изображения, то порядок строк при записи изображения соответствует четырех проходному процессу. При первом проходе записывается каждая 8-ая строка, начиная с верхней строки окна изображения. При втором проходе записывается каждая 8-ая строка, начиная с пятой строки сверху. На третьем проходе записывается каждая 4-ая строка, начиная с третьей строки окна. Четвертый проход завершает изображение, записывая каждую вторую строку, начиная со второй строки с сверху. Ниже приведено графическое описание этого процесса.
Значения пикселей изображения обрабатываются как цветовые индексы, указывающие на существующую таблицу цветов. В результате получается цветовое значение из таблицы, которое реально воспроизводится на экране. Эти серии цветовых индексов, число которых равно ширине_изображения*высоту_изображения, пропускаются через поток данных изображения GIF по одному значению на пиксель, сжимаются и упаковываются в соответствии с версией алгоритма сжатия LZW.

Терминатор GIF. Для того, чтобы обеспечить синхронизацию с окончанием файла изображения GIF, декодер GIF должен обрабатывать окончание режима GIF по символу шестнадцатеричное 0x3B или ';', найденному после окончания обработки изображения.

Блоки управления расширением
Их четыре типа:

- управление графикой;
- управление текстом;
- комментарии;
- приложения.

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

Название | Длина (в байтах) | Содержимое файла | Примечание
--- | --- | --- | ---
Признак блока | 1 | 21 | "!" - идентификатор расширенного блока
Признак расширения | 1 | 01 | текст
Размер блока | 1 | 0C | всегда
Позиция текста по оси Х | 2 | 00 14 | 20
Позиция текста по оси Y | 2 | в пикселях 00 ОА | 10
Ширина текста по оси Х | 2 | 00 38 | 56
Ширина текста по оси Y | 2 | 00 0A | в пикселях 10
Ширина буквы | 1 | 08 | 8
Высота буквы | 1 | 0A | 10
Цвет фона | 1 | 07 | из палитры
Цвет буквы | 1 | 01 |
Текст | от 1 до 255 | 8F 90 88 82 ... | ПРИВЕТ!
Признак конца блока | 1 | 00 | терминатор (всегда)

Расширенный блок GIF может непосредственно предшествовать дескриптору изображения или находиться перед терминатором GIF.
Структура блока управления расширением в общем виде:

Байт | Значение/Содержание | Описание
--- | --- | ---
1 | 21h | "!" - идентификатор расширенного блока
2 | Функциональный код | Расширенный функциональный код (0-255)
3 | Байт-счетчик | Повторяется столько раз, сколько необходимо
4 | Функ. байты данных
... | ... | ...
n | 0 | Нулевой байт-счетчик (терминатор блока)

Image Tools Group 2004г.

На главную / Предыдущий раздел / Следующий раздел / Вверх