Що таке файл GIF?
GIF або Graphical Interchange Format — це тип сильно стиснутого зображення. GIF, що належить Unisys, використовує алгоритм стиснення 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. Поля Height і Width містять найменше значення роздільної здатності екрана, обов’язкове для відображення даних зображення. Якщо пристрій відображення не в змозі відобразити вказану роздільну здатність, для відповідного відображення зображення знадобиться масштабування. Інформація про екран і колірну карту відображається чотирма підполями таблиці нижче (тоді як біт 0 є молодшим бітом):
Біти | Підполя |
---|---|
0-2 | Розмір глобальної таблиці кольорів |
3 | Прапор сортування таблиці кольорів |
4-6 | Роздільна здатність кольору |
7 | Прапор глобальної таблиці кольорів |
Загальна таблиця кольорів
Додаткова таблиця глобальних кольорів розміщується одразу після дескриптора логічного екрана. Ця таблиця зіставлена для індексування даних кольору пікселів у даних зображення. За відсутності глобальної таблиці кольорів кожне зображення у файлі GIF використовує свій локальний колір. Краще надати таблицю кольорів за замовчуванням, якщо відсутні глобальна та локальна таблиця кольорів. Серія трибайтових трійок складає елементи таблиці кольорів. Кожен байт характеризує значення кольору RGB. Червоний, зелений і синій кольори використовуються як значення кожного елемента таблиці кольорів. Записи в глобальній таблиці кольорів охоплюють максимум 256 записів і завжди відображаються у ступені двох.
Дані зображення
Дані зображення зберігають байт незакодованих символів, за якими йде пов’язаний список підпорядкованих символів разом із даними, закодованими LZW.
Трейлер
Трейлер представляє один байт даних, який є останнім символом у файлі. Значення цього байта постійно дорівнює 3Bh і вказує кінець потоку даних. Кожен GIF-файл повинен мати трейлер в кінці кожного файлу.