Что такое GIF-файл?
Формат GIF или Graphical Interchange Format представляет собой тип сильно сжатого изображения. Принадлежащий Unisys, GIF использует алгоритм сжатия LZW, который не ухудшает качество изображения. Для каждого изображения в формате GIF обычно допускается до 8 бит на пиксель, а в изображении допускается до 256 цветов. В отличие от изображения JPEG, которое может отображать до 16 миллионов цветов и практически выходит за пределы возможностей человеческого глаза. Когда появился Интернет, GIF-файлы оставались лучшим выбором, потому что они требовали низкой пропускной способности и были совместимы с графикой, которая использует сплошные области цвета. Анимированный GIF объединяет множество изображений или кадров в один файл и отображает их в последовательности для создания анимированного клипа или короткого видео. Ограничения по цвету составляют до 256 для каждого кадра и, вероятно, будут наименее подходящими для воспроизведения других изображений и фотографий с цветовым градиентом.
Формат файла GIF
Концептуально файлы GIF имеют графическую область фиксированного размера, заполненную нулем или более изображений. Некоторые файлы GIF делят графическую область или блоки фиксированного размера на части изображения, способные функционировать как анимированные кадры в случае анимированного GIF. Формат GIF использует глубину пикселя от 1 до 8 бит для хранения растровых данных. Цветовая модель RGB и данные палитры всегда используются для хранения изображений. В зависимости от версии заголовок фиксированной длины («GIF87a» или «GIF89a») определяет начало типичного файла GIF.
В настоящее время доступны две версии GIF: 87a и 89a. Первый — это исходный формат GIF, а второй — новый формат GIF. В этом формате файла характеристики блоков и размеры в пикселях упоминаются в дескрипторе логического экрана фиксированной длины. Существование и размер глобальной таблицы цветов могут быть указаны дескриптором экрана, который отслеживает дополнительные сведения, если они присутствуют. Трейлер — это последний байт файла, который содержит один байт точки с запятой ASCII. Типичный макет файла GIF87a выглядит следующим образом:
Заголовок
Заголовок содержит шесть байтов и используется для указания типа файла GIF. Хотя дескриптор логического экрана отделен от фактического заголовка, иногда он рассматривается как второй заголовок. В той же структуре, которая используется для хранения заголовка, может храниться дескриптор логического экрана. Все файлы GIF начинаются с 3-байтовой подписи и используют символы «GIF» в качестве идентификатора. Версия также имеет размер три байта и объявляет версию файла GIF.
Дескриптор логического экрана
Дескриптор изображения фиксированной длины определяет информацию об экране и цвете, необходимую для создания изображения GIF. Поля Высота и Ширина содержат наименьшее значение разрешения экрана, обязательное для отображения данных изображения. Если устройство отображения не может отображать указанное разрешение, потребуется масштабирование для надлежащего отображения изображения. Информация об экране и цветовой карте отображается в четырех подполях таблицы ниже (где бит 0 является младшим значащим битом):
Биты | Подполя |
---|---|
0-2 | Размер глобальной таблицы цветов |
3 | Флаг сортировки таблицы цветов |
4-6 | Цветовое разрешение |
7 | Флажок глобальной таблицы цветов |
Глобальная таблица цветов
Необязательная глобальная таблица цветов размещается сразу после дескриптора логического экрана. Эта таблица сопоставляется для индексации данных о цвете пикселей внутри данных изображения. При отсутствии глобальной таблицы цветов каждое изображение в файле GIF использует свой локальный цвет. Лучше предоставить таблицу цветов по умолчанию, если отсутствуют глобальная и локальная таблицы цветов. Ряд трехбайтовых троек составляет элементы таблицы цветов. Каждый байт характеризует значение цвета RGB. Красный, зеленый и синий цвета используются в качестве значений каждого элемента таблицы цветов. Максимальное количество записей в глобальной таблице цветов составляет 256, и они всегда представляют собой степень двойки.
Данные изображения
Данные изображения хранят байт незакодированных символов, за которым следует связанный список суб- вместе с данными, закодированными с помощью LZW.
Трейлер
Трейлер представляет один байт данных, который является последним символом в файле. Значение этого байта постоянно равно 3Bh и указывает конец потока данных. Каждый файл GIF должен иметь трейлер в конце каждого файла.