Новости

Короткий опис формату GIF

  1. Історія GIF
  2. Деякі загальні дані
  3. Дескриптор логічного екрана
  4. Глобальна палітра
  5. дескриптор зображення
  6. локальна палітра
  7. графічний блок
  8. Розширення управління графікою
  9. Розширення простого тексту
  10. розширення коментаря
  11. розширення програми
  12. Розширення програми Netscape
  13. Розширення програми Pianygif
  14. Висновок
  15. джерела:

Домівка Чьеза

GIF - один з найбільш поширених і популярних в інтернеті форматів зображень. Думаю, що не помилюся, якщо припущу, що загальне число всіх файлів GIF в світі обчислюється мільярдами. Настільки широке поширення GIF багато в чому визначається особливостями його формату. Я спробував більш наочно уявити внутрішню будову файлів GIF, ніж це зроблено в сухому офіційному описі формату. Всі картинки на цій сторінці - в форматі GIF, так що, можна сказати, що формат GIF ілюструє сам себе.

Історія GIF

У 1977 році два ізраїльських фахівця з теорії інформації, Яків Зів і Авраам Лемпеля, написали універсальний алгоритм стиснення даних, який отримав назву LZ (Lempel-Ziv). Пізніше, в 1984 році, Террі Велч, співробітник фірми Unisуs (Юнaйсіс), змінив цей алгоритм, трохи поліпшивши ступінь стиснення. Цей метод став називатися LZW (Lempel-Ziv-Welch).

Через сім років, в 1987 році, фірма CompuServe (Компьюсерв) використовувала алгоритм LZW при створенні нового формату зображень, призначеного спеціально для обміну графікою між комп'ютерами - GIF (Graphic Interchange Format). З розвитком інтернету, коли потреба в компактних, швидко передаються по мережі зображеннях багаторазово зросла, формат GIF став надзвичайно популярний, і змагатися з ним зараз може лише один формат - JPEG (Joint Photographic Expert Group), орієнтований на зображення фотографічної якості, в той час як GIF володіє такими недоступними для JPEG властивостями, як прозорий фон і анімація. У 1989 році CompuServe випустила розширену версію формату - GIF89a. У неї і були додані ці нові можливості.

У 1995 році фірма Unisуs, що володіє патентом на метод LZW, несподівано вирішила, що на ньому можна заробити, і заборонила поширення програм, що використовують стиснення LZW, без ліцензії. Тепер, щоб продавати або навіть безкоштовно поширювати програми, що створюють або показують зображення GIF, потрібно було платити за ліцензію щонайменше 5000 доларів. Справа доходила до того, що гроші вимагали навіть з власників сайтів, де зображення GIF створювалися динамічно. Програмісти стали шукати обхідні шляхи. З'явилися альтернативні формати, серед яких найвідомішим став PNG ( "Пінг", Portable Network Graphic). За деякими параметрами він перевершує GIF, а з появою анімованої версії (MNG) він став буквально наступати формату GIF на п'яти. І не дивно, адже в ньому теж застосований один з варіантів методу стиснення Лемпеля-Зива - LZ77.

На щастя 20 червня 2003 року термін дії основного патенту Unisуs на метод LZW в США закінчився, а патенти в Європі і Канаді були дійсні лише до 7 липня 2004 року, що, можливо, дасть формату GIF шанс не втратити завойовані їм за минулі роки позиції .

Деякі загальні дані

  • Розмір картинки - від 1 х 1 до 65535 х 65535 пікселів.
  • Число кольорів палітри - від 2 до 256.
  • Кожен колір палітри має глибину 24 біта / піксель (вибір з 16 мільйонів квітів).
  • Карта прозорості - 1-бітна (напівпрозорих кольорів немає).
  • Число повторів анімації - від 1 до 65535, а також нескінченне.
  • Час показу одного кадру анімації - від 1/100 секунди до 655 секунд.
  • Число кадрів анімації - необмежено.
  • Число невидимих ​​текстових коментарів і розмір кожного коментаря - необмежені.

структура

Файли формату GIF мають блочну структуру. Це означає, що вони складаються з окремих блоків, які в більшості випадків ніяк не пов'язані один з одним. Програми, які не розпізнають деякі типи блоків, можуть просто пропускати їх - для цього у кожного нестандартного блоку в заголовку вказано його розмір. Ті, що йдуть один за іншим блоки графіки (Картинки) складають анімацію. Вони змінюються на екрані і створюють ілюзію руху. До або після них (або навіть між ними) в файлі можуть перебувати інші блоки:

  1. Коментарі . Прихований текст, його можна побачити лише за допомогою спеціальних програм - наприклад, GIF-аніматорів, таких, як Ulead GIF Animator.
  2. простий текст . Рядки символів з обмеженими можливостями форматування. В даний час не використовується.
  3. Блоки управління графікою , Що задають параметри виведення окремих картинок.
  4. Глобальна і локальні колірні палітри , Що визначають, які саме кольори будуть у картинок.
  5. особливі блоки , Які можуть використовуватися лише тими програмами, які знають про їхнє існування і призначення - наприклад, блок Netscape , Що задає число циклів анімації. Без нього анімація після завантаження сторінки спрацьовує всього один раз. А в блоці Pianygif зберігаються назви окремих картинок для полегшення їх редагування.

Мінімально необхідний набір блоків - найпростіший неанімірованние GIF:

Поводите мишкою над блоками для виведення їх назв (працює не на всіх браузерах)

Зелений Текстові константи Жовтий Змінні Блакитний Байти з упакованими в них полями і прапорами Рожевий Шістнадцяткові константи Сірий Блоки даних змінної довжини Білий Зарезервовані байти або біти

Дескриптор логічного екрана

Дескриптор логічного екрана

На початку кожного файлу GIF знаходиться заголовок. Оскільки відразу за ним йде дескриптор логічного екрана, я вважаю заголовок його частиною. Він складається з тексту "GIF87a" або "GIF89a", в залежності від версії.

Дескриптор - це просто "описатель" або "опис". Логічний екран - область реального екрану комп'ютера, куди виводяться всі картинки даного файлу GIF. Вони можуть мати різний розмір і займати різне положення на логічному екрані

W, H - ширина і висота логічного екрана в пікселах, тобто розмір області виводу картинок. Зображення, що не вміщаються на логічному екрані, повинні обрізатися по його розміру.

BG - номер кольору фону. Якщо у файлі присутній глобальна палітра, то цим кольором заливаються області фону, де немає картинок. Але якщо при цьому в самому першому, ще до всіх картинок, розширенні управління графікою включена прозорість, то цей колір вважається прозорим.

R - співвідношення сторін вихідного зображення. У версії GIF87a це поле зарезервовано, і тут стоять нулі. Наскільки мені відомо, цей параметр ніколи і ніким не використовується. Передбачалося, що піксель екрану може бути і не квадратним, як було в старих комп'ютерах і як зараз буває при деяких режимах DOS, і що для виведення таких зображень необхідно змінювати дозвіл екрана або розтягувати зображення так, щоб воно виглядало більш реалістичним.

CT - наявність глобальної палітри. Якщо цей прапорець встановлений, то відразу після дескриптора глобального екрану повинна починатися глобальна палітра. Розмір палітри визначається полем Size.

Color - колірне дозвіл вихідної картинки. Число бітів, що припадає на кожен з трьох основних кольорів. Якщо файл GIF створений безпосередньо з повнокольорового зображення, то Color буде дорівнює 7, а якщо з вже індексованого, то його значення буде залежати від глибини кольору цієї індексованої картинки, причому вельми приблизно. Наприклад, якщо файл створений на основі 16-кольорової картинки, то Color має дорівнювати 1, і вихідна палітра передбачається 64-кольоровий.

Глибина кольору вихідного зображення Color Число кольорів Біт / піксель Біт / колір 16777216 24 8 7 2097152 21 7 6 262144 18 6 5 32768 15 5 4 4096 12 4 3 512 9 3 2 64 6 2 1 8 3 1 0

SF - прапор сортування палітри. У версії GIF87a цей біт зарезервований, і тут стоїть нуль. Вказує, сортована чи палітра за значимістю квітів, коли першими йдуть найбільш значущі кольору. Значимість кольору залежить від того, яку площу зображення він займає по відношенню до інших квітів.

Size - розмір палітри і число квітів картинки. Якщо прапор глобальної палітри CT скинутий, то тут повинні стояти нулі.

Size Число кольорів Розмір палітри, байт 7 256 768 6 128 384 5 64 192 4 32 96 3 16 48 2 8 24 1 4 12 0 2 6

Глобальна палітра

Глобальна палітра

Зображення, які знаходяться в файлі GIF, індексовані. Картинки складаються не з повнокольорових пікселів, а з номерів квітів, а самі кольори знаходяться в палітрі. Палітра складена з тріад, в свою чергу складаються з байтів червоного (R), зеленого (G) і синього (B) основних кольорів. З усього різноманіття кольорів (сучасні комп'ютери та монітори можуть показувати на екрані до 16 мільйонів квітів) використовується всього лише від 2 до 256. Зведення числа квітів до мінімуму без значного погіршення якості зображення і без втрати інформації - те саме що мистецтву, і автоматизації піддається погано. Багато графічні редактори - такі як Adobe Photoshop, наприклад - дозволяють інтерактивно вибрати найкращий варіант індексації картинки "на око".

Якщо вона є, глобальна палітра йде відразу за дескриптором логічного екрана. Наявність палітри визначається прапором CT дескриптора, а розмір - полем Size. Глобальна палітра діє на всі картинки, у яких немає своєї локальної палітри. У тому аварійному випадку, якщо в файлі немає ні глобальної, ні локальних палітр, програма перегляду може діяти на власний розсуд - наприклад, використовувати системну палітру. Однак рекомендується, щоб перші два кольори в ній були чорним і білим, щоб в будь-якому випадку на екран вивелося хоч щось.

дескриптор зображення

дескриптор зображення

Діє на наступний за ним графічний блок (картинку). Без нього картинка виводиться не буде, так що його можна вважати невід'ємною частиною графічного блоку. Між дескриптором і блоком графіки може перебувати тільки локальна палітра.

W, H - ширина і висота картинки в пікселах.

Left, Top - положення картинки на логічному екрані.

CT - наявність локальної палітри. Якщо цей прапорець встановлений, то відразу після дескриптора зображення повинна починатися локальна палітра. Розмір палітри визначається полем Size.

I - чересстрочная або звичайна розгортка картинки при виведенні на екран. При скачуванні картинки з інтернету черезрядковий дозволяє швидше отримати перше враження про зображення, хоча воно буде ще недостатчно чітким. Однак файли з чергуванням рядків трохи більше за розміром, а при перегляді в відключеному режимі такі картинки можуть виводитися повільніше.

SF - прапор сортування палітри. У версії GIF87a цей біт зарезервований, і тут стоїть нуль. Вказує, сортована чи палітра за значимістю квітів, коли першими йдуть найбільш значущі кольору. Значимість кольору залежить від того, яку площу зображення він займає по відношенню до інших квітів.

Size - розмір локальної палітри і число квітів картинки (див. вище ). Якщо прапор локальну палітру CT скинутий, то тут повинні стояти нулі.

локальна палітра

локальна палітра

Якщо вона є, повинна йти відразу за дескриптором зображення Наявність палітри визначається прапором CT дескриптора, а розмір - полем Size. Діє вона тільки на наступний відразу за нею графічний блок (картинку).

Для зменшення розміру файлу краще обмежитися однією глобальною палітрою, не вдаючись до локальних - особливо, якщо мова йде про багатобарвних картинках. Максимальний розмір палітри при 256 квітах - 768 байт, а якщо помножити на число картинок в анімації, то сума набігає солідна.

графічний блок

графічний блок

Картинка, стисла за методом LZW. Вона розбита на окремі субблоки по 255 байт. Число картинок в файлі, як і розмір кожної картинки, нічим не обмежені. Анімованим GIF стає в тому випадку, якщо в ньому більше однієї картинки. Тоді при перегляді файлу в браузері автоматично включається анімація. Про метод стиснення LZW досить докладно розказано на моїй сторінці Стиснення по методу LZW .

MC - Початковий розмір LZW-коду. Дорівнює глибині кольору картинки, за винятком двоколірних, коли MC дорівнює не 1, а 2.

Число кольорів Глибина кольору, біт / піксель MC Розмір LZW-коду 256 8 8 9 128 7 7 8 64 6 6 7 32 5 5 6 16 4 4 5 8 3 3 4 4 2 2 3 2 1 2 3

S - розмір субблока даних, не включаючи сам байт S. У всіх субблоков, крім останнього, розмір повинен бути рівний 255 байтам. У останнього субблока (або якщо він взагалі один) розмір може бути будь-яким - від 1 до 255 байт.

Розширення управління графікою

Розширення управління графікою

Введено в версії GIF89a. Діє на перший же наступний за ним графічний блок (картинку). Між ним і блоком графіки можуть бути вставлені інші блоки (наприклад, коментар) - це його роботі не заважає.

Delay - час затримки, в 1/100 сек. Час, протягом якого така картинка залишається на екрані. Мінімальне значення - 1/100 секунди, максимальна - приблизно 655 секунд. Таймер починає відлік лише після того, як картинка виведена на екран, тому у різних програм перегляду час затримки може мати відчутні відмінності. Наприклад, якщо спробувати зробити анімований GIF - годинник, то вони можуть, в залежності від браузера, за хвилину поспішати або відставати більш ніж на секунду.

Tr - номер прозорого кольору. Якщо є локальна палітра, це номер кольору в ній, якщо ж локальну палітру немає, то це номер кольору в глобальній палітрі.

Disp - спосіб заміни картинки після показу:

Disp Спосіб заміни Примітка 0 На розсуд браузера Зазвичай результат такий же, як при 1 + 1 Залишити як є Накладення наступної картинки поверх даної 2 Відновити колір фону Стирання картинки перед виведенням наступної 3 Відновити попередню картинку Підтримується не всіма програмами перегляду,
використовувати не рекомендується 4 ... 7 Зарезервовані

UI - очікується реакція користувача. Ще один ніколи і ніким не використовується параметр. Передбачалося, що якщо цей прапор встановлений, то після вирішення цієї картинки для продовження анімації і виведення наступних необхідно, наприклад, клацнути кнопкою мишки.

TF - прапор прозорості. Якщо він встановлений, дана картинка виводиться з прозорим фоном, колір якого визначається параметром Tr.

Розширення простого тексту

Розширення простого тексту

Введено в версії GIF89a. Передбачалося, що разом з картинками будуть передаватися текстові повідомлення, що з'являються на екрані в паузах між ними або поверх них. Так як символи більш 0xF7 виводяться (замінюються на прогалини), це робить розширення непридатним для виведення символів кирилиці (російських букв). В даний час всі тексти в файлах GIF йдуть у вигляді картинок, так що це розширення, наскільки мені відомо, ніколи і ніким не використовується.

Left, Top - положення області тексту на логічному екрані.

W, H - розмір області тексту. Рядки, що виходять за її рамки, обрізаються. Переклади рядки повинні бути заздалегідь вставлені в текст.

cW, cH - розмір символів. Рекомендується використовувати значення 8х8 або 8х16 пікселів, що в даний час годиться лише для DOS.

FG - номер кольору тексту.

BG - номер кольору фону. Цим кольором заливаються області фону, де немає тексту.

S - розмір субблока даних, не включаючи сам байт S. У всіх субблоков, крім останнього, розмір повинен бути рівний 255 байтам. У останнього субблока (або якщо він взагалі один) розмір може бути будь-яким - від 1 до 255 байт.

розширення коментаря

розширення коментаря

Введено в версії GIF89a. В основному сюди записують дані про авторські права творців файлу GIF - і людей, і програм. Найдовший текст можна очікувати в тому випадку, якщо програма безкоштовна або умовно-безкоштовна. Довжина тексту нічим не обмежена. В принципі сюди можна записати навіть таку мегабайтовий книгу, як "Мобі Дік".

S - розмір субблока даних, не включаючи сам байт S. У всіх субблоков, крім останнього, розмір повинен бути рівний 255 байтам. У останнього субблока (або якщо він взагалі один) розмір може бути будь-яким - від 1 до 255 байт.

розширення програми

розширення програми

Введено в версії GIF89a. Розширення програми - це спеціальні блоки даних - не картинки і не текст. З ними можуть працювати тільки ті програми (додатки), для яких вони призначені. Найбільшу популярність набуло розширення програми Netscape, що описується нижче.

ID - ідентифікатор додатки. Текст з 8 символів, за яким програма перегляду визначає, чи зможе вона прочитати дані, і якого вони типу.

Code - код перевірки ідентифікатора. Передбачалося, що програма, яка створила GIF, буде синтезувати двійкового коду для підтвердження своїх прав на дане розширення. На ділі тут теж знаходиться текст з 3 символів.

S - розмір субблока даних, не включаючи сам байт S. У всіх субблоков, крім останнього, розмір повинен бути рівний 255 байтам. У останнього субблока (або якщо він взагалі один) розмір може бути будь-яким - від 1 до 255 байт.

Розширення програми Netscape

Розширення програми Netscape

Повинно йти відразу за глобальної палітрою (якщо вона є) або за дескріптом логічного екрану (якщо її немає). Єдина мета даного розширення - встановити число циклів анімації. Як можна здогадатися, першим додатком, яке могло використовувати цю інформацію, був браузер Netscape 2.0. Зараз це розширення присутній майже у всіх файлах GIF, де є анімація.

? - тут варто 0x01, але що це означає, мені невідомо. Можливо, спочатку цей байт передбачалося використовувати, але потім він виявився непотрібним.

Loop - Число циклів анімації, від 0 до 65535. Тут є деякі дивні речі. По-перше, без розширення Netscape цикл анімації спрацьовує, але тільки один раз. Якщо ж вставити розширення Netscape в файл і встановити Loop = 1, то цикл буде прокручуватися двічі, як і при Loop = 2. А при Loop = 0 анімація крутиться нескінченно, так що її відключення, для того, щоб виводилася тільки одна перша картинка, в будь-якому випадку виявляється неможливим.

Розширення програми Pianygif

Розширення програми Pianygif

Зовсім випадково я виявив ще одне розширення програми. Судячи з його назвою, повинна бути програма з назвою "Pianygif", але я такої не виявив - можливо, вона вже давно канула в Лету. Однак користь від цього розширення є. У ньому зберігаються назви окремих графічних блоків (або "шарів") картинки, що допомагає розрізняти їх при редагуванні анімації. Так, наприклад, це розширення використовує редактор GIF-анімації Ulead GIF Animator, що входить в набір Ulead Web Razor.

Назви зберігаються розбитими на субблоки даних, які, після об'єднання і видалення байтів розміру вдають із себе один рядок необмеженої довжини, де назви відокремлені один від одного роздільником 0x01. Послідовність назв відповідає послідовності картинок в файлі. Закінчується рядок термінатором 0x0101 або 0x010F. Від чого залежить вибір термінатора, визначити поки не вдалося.

S - розмір субблока даних, не включаючи сам байт S. У всіх субблоков, крім останнього, розмір повинен бути рівний 255 байтам. У останнього субблока (або якщо він взагалі один) розмір може бути будь-яким - від 1 до 255 байт.

Висновок

Може здатися, що формат GIF зі своїми 256 квітами вже остаточно застарів, проте в порівнянні з іншими техніками виведення зображень він навіть може в чомусь і вигравати.

Наприклад, застосування для створення анімованих кнопок і банерів замість картинок GIF техніки Flash передбачає, що на кожному браузері встановлений плагін Flash або елемент ActiveX Flash потрібної версії. Це може в окремих випадках призвести до того, що користувачі не тільки не зможуть побачити рекламу, але і взагалі не зможуть потрапити на даний сайт, в той час як підтримка GIF спочатку вбудована в усі браузери, починаючи з найперших версій.

Завойовує все більшу популярність формат PNG, при всіх своїх незаперечних переваги (повнокольоровий картинка, прозорість з альфа-каналом), не може забезпечувати настільки сильного стиснення малокольорових зображень, не кажучи вже про анімацію. Його анімована модифікація MNG, наскільки мені відомо, поки не підтримується жодним браузером.

Інші нові формати - такі, як JPEG 2000 - орієнтовані в основному на фотографічні зображення і не становлять серйозної конкуренції формату GIF, тим більше що пройде ще чимало часу, поки браузери в усьому світі обзаведуться підтримкою цих нових форматів. У теперішній же час GIF, поряд з JPEG, залишається одним з двох основних форматів зображень, використовуваних в інтернеті, і, швидше за все, буде служітть нам ще довго.

джерела:

Останнє оновлення було 16 серпня 2005

Уважаемые партнеры, если Вас заинтересовала наша продукция, мы готовы с Вами сотрудничать. Вам необходимо заполнить эту форму и отправить нам. Наши менеджеры в оперативном режиме обработают Вашу заявку, свяжутся с Вами и ответят на все интересующее Вас вопросы.

Или позвоните нам по телефонам: (048) 823-25-64

Организация (обязательно) *

Адрес доставки

Объем

Как с вами связаться:

Имя

Телефон (обязательно) *

Мобильный телефон

Ваш E-Mail

Дополнительная информация: