Формат GIF — палитра из 256 цветов и анимация
Формат GIF от CompuServe (1987, 87a и 89a): палитра 256 цветов, сжатие LZW, прозрачность одного цвета, анимация и когда лучше WebP или видео.
GIF (Graphics Interchange Format) — формат, представленный американским онлайн-сервисом CompuServe в 1987 году; в редакции 1989 года GIF89a появились блоки расширений для прозрачного цвета и анимации. Он используется с первых дней интернета и до сих пор служит синонимом «гифки», но технически это один из самых старых форматов.
Палитра из 256 цветов и сжатие LZW
GIF не хранит цвет каждого пикселя напрямую — он хранит номер цвета из палитры (таблицы цветов) размером до 256 цветов. По спецификации размер таблицы — степень двойки, максимум 256 элементов. Этот массив номеров сжимается без потерь алгоритмом LZW.
Само сжатие — без потерь, но при сокращении фото с более чем 16 млн цветов до 256 теряется очень многое. Плавные градиенты, как небо или кожа, передаются точечным узором (дизерингом) или полосами. И наоборот, пиксель-арт и простые фигуры с малым числом цветов сохраняются компактно и чётко.
С алгоритмом LZW когда-то были связаны патентные проблемы, и это стало одной из причин разработки PNG в 1990-х. Эти патенты давно истекли.
Прозрачность
В расширении управления графикой (Graphic Control Extension) GIF89a есть поле для одного номера прозрачного цвета. Пиксели с этим номером не отрисовываются, и сквозь них виден фон. То есть прозрачность бывает только «полностью прозрачно или полностью непрозрачно» — полупрозрачные тени и мягкие края передать нельзя. Поэтому, если положить прозрачный GIF на фон другого цвета, по краям часто видна белая кайма (ореол).
Анимация
Анимация GIF — это последовательный показ нескольких изображений, а задержка между кадрами по спецификации задаётся в сотых долях секунды. Число повторов задаётся блоком расширения (NETSCAPE2.0), который позже получил широкое распространение.
Структура файла
Файл GIF начинается с 6-байтовой сигнатуры GIF87a или GIF89a, за которой идут следующие блоки.
- Дескриптор логического экрана: ширина и высота всего холста и номер цвета фона
- Глобальная таблица цветов: палитра для всего файла (необязательно)
- Расширение управления графикой: задержка следующего кадра, номер прозрачного цвета, способ обработки кадра (89a)
- Дескриптор изображения и данные изображения: положение и размер кадра, при необходимости локальная таблица цветов, данные со сжатием LZW
- Пункты 3–4 повторяются столько раз, сколько кадров, а в конце идёт завершающий байт (3B).
Поскольку у каждого кадра может быть своя локальная таблица цветов, теоретически во всём файле можно использовать больше 256 цветов, но внутри одного кадра ограничение в 256 цветов сохраняется.
Достоинства и ограничения
- Совместимость: все браузеры, мессенджеры и почти все программы воспроизводят его вместе с анимацией.
- Неэффективность по размеру: каждый кадр сжимается отдельно в 256 цветах, поэтому видео, похожее на фото, даёт очень большой файл. Google поясняет, что анимированный WebP может быть меньше GIF и APNG.
- Ограничения цвета и прозрачности: только 256 цветов и 1-битная прозрачность.
Основное применение и альтернативы
По-прежнему используется, когда главное — чтобы воспроизводилось везде: короткие реакции, иконки загрузки, пиксель-арт. Для анимированных изображений на сайте анимированный WebP или AVIF и короткие видео (MP4, WebM) гораздо меньше и чётче.
На что обратить внимание при конвертации
- GIF → JPG и PNG: большинство инструментов сохраняют только первый кадр как статичное изображение.
- PNG и JPG → GIF: изображение сокращается до 256 цветов, и качество фото сильно падает. Не рекомендуется, если это не логотип или простые фигуры.
- Как конвертировать статичные изображения в разные форматы, смотрите в инструменте конвертации изображений.
Попробовать сейчас