DETAILNÍ POPIS FORMÁTU GIF

Grafický obrazový formát GIF (graphics interchange format) vyvinula americká firma CompuServe. Programové produkty využívající tento formát pracují mimo počítačů IBM PC i na počítačích Amiga, Atari ST, Macintosh a jiných. To umožňuje přenášet obrazovou informaci nejen mezi programovými produkty, ale i mezi počítači.

Díky formátu GIF lze dosáhnout dobrého kompresního poměru, a to zejména kdy jde o "ploché" motivy s malým počtem barevných odstínů; těmi mohou být např. tlačítka, grafické prvky, či ikony,Komprese je v tomto případě beze ztrát. Maximální počet barev v obrázku je však omezen na 256. Ve verzích formátu GIF 87a a89a je definován i prokládaný (interlaced) GIF. Verzí 89a standardu GIF počínaje v sobě může soubor GIF kromě jednoho klasického obrázku ukrývat také celou sérii obrázků, které jsou pomocí vhodného softwaru zobrazovány jeden po druhém.Vznikne tak vlastně mini-GIF-animace. Informace o tom, jak rychle se mají jednotlivé obrázky střídat (rychlost animace), jsou uloženy společně s daty obrázku.

V grafickém formáte GIF je grafický obraz uložený jako jistý pocet různe velkých pravoúhlých obrázku se spolecným grafickým pozadím (barvou). Casti odpovídající pozadí tak nenesou žádnu informaci a nejsou kodované. Každý jednotlivý obrázek reprezentují datový blok , ve kterém je definovaná reletivnípoloha vuci pozadí, pocet ruzných barevních odstínu v obrázku a vlastní obrazová informace. Struktura souboru GIF má tvar uvedený v první tabulce.

délka význam povinnost
6 byte GIF-signatura povinná
7 byte globální deskriptor obrazovky povinný
různá globální taulka barev nepovinná
různá rozšiřující blok nepovinný
různá blok popisu obrázku 1 povinný
různá blok popisu obrázku 2 nepovinný
... ... ...
různá blok popisu obrázku N nepovinný
1 byte koncový znak GIF-3BH povinný
Tab 1.1 Struktura souboru GIF

Signatura formátu jednoznačně určuje typ datového formátu (GIF) a číslo jeho verze buď 87a nebo 89a. Novější verze 89a je jen rozšířením verze 87a. Dalších 7 byte určuje globální deskriptor obrazovky, který je společný a závazný pro všechny jednotlivé obrázky vytvářející celý obrázek.

1. byte Šířka obrazovky v pixelech.
2. byte
3. byte Výška obrazovky v pixelech
4. byte
5. byte GCTF Color Res. Sort GCT Size
6. byte Barva podkladu obrazu
7. byte Pixel Aspect Ratio
Tab 1.2 Globální descriptor obrazovky formátu GIF

První 2 byte nesou informaci o šířce obrazovky a další 2 byte udávají výšku obrazovky v pixelech. Pátý byte obsahuje zhuštěnou informaci o způsobu interpretace tabulky barev:

  • nejvyšší, 7. bit je tzv. Global Color Table Flag - příznak existence globální tabulky barev. Když je nastavený na 1, znamená to, že za obrazovým deskriptorem bude následovat globální tabulka barev (Color Map).
  • obsah bitů 4.-6. (Color Resolution) zvýšený o 1 nám říká, kolik je k dispozici bitů na pixel; to znamená, že maximální počet bitů na pixel může být 8, co představuje 256 barevných odstínů v základním obraze. Později uvidíme, že jednotlivé obrázky mohou nést informaci o dalších barevných odstínech.
  • 3. bit (Sort Flag) - když je nastavený, globální tabulka barev je vzestupně setříděná (nejvýznamnější barva je uvedena jako první).
  • bity 0.-2. (Size of Global Color Table) nesou informaci o velikosti globální tabulky barev. Platí vztah: velikost tabulky v bytu=3*2(GCTSize+1)

    Šestý určuje základní barevný odstín pozadí obrazovky. Sedmý byte obsahuje údaj o rozlišovacím poměru výšky k šířce pixelu v původním obrázku (tzv. Pixel Aspect Ratio). Když je obsah různý od nuly, rozlišovací poměr se dá vypočítat ze vztahu: POMĚR:=(Pixel_Aspect_Ratio+15)/64

    Volitelná globální tabulka barev určuje vztah mezi barevným indexem a barvou. Každá barva je určená obsahem jednoho bytu (tj. rozsah 0-255). Trojice po sobě následující v byte určuje poměr mezi barevnými složkami RGB (červená, zelená, modrá). Na počítačích, které pro hodnotu barevné složky používají menší počet bitů než 8, se tato hodnota ukládá zleva, a zprava se doplní nulami. Tímto způsobem dosáhneme dobrou interpretaci obrazu na různých technických zařízeních.

    Podíl červené barvy barevný index 0
    zelené barvy
    modré barvy
    Podíl červené barvy barevný index 1
    zelené barvy
    modré barvy
    ... barevný index n
    Tab 1.3 Globální tabulka barev formátu GIF

    Vlastní obrazová informace je uložená v posloupnosti částečných pravoúhlých obrázků, ze kterých je každý popsán deskriptorem. Jeho struktura je uvedena v následující tabulce:

    délka význam
    1 byt oddělovač bloku obrazu - 2CH
    2 byty pozice obrazu zleva
    2 byty pozice obrazu zhora
    2 byty šířka obrazu v pixelech
    2 byty výška obrazu v pixelech
    1 byt informaceo vnitřní struktuře obrázku a lokální tabulky barev
    různá lokální tabulka barev (volitelná)
    1 byt počáteční velikost kódu v bitech (pro LZW algoritmus)
    různá blok zkomprimovaných dat
    Tab 1.4 Vlastní obrazová informace formátu GIF

    Lokální deskriptor začíná oddělovačem - bytem s obsahem 2Ch. Další dvě dvojice bytů určují polohu obrázku zleva a shora od okraje zobrazovacího zařízení. Podobně jako při globálním deskriptoru následují 4 byty s informacemi o šířce a výšce obrázku v pixelech. Desátý byte lokálního deskriptoru je rozdělený na jednotlivé bity nebo skupiny bitů:
    - jestliže je nastavený nejvyšší 7. bit (Local Color Table Flag) na 1, barvy se nebudou čerpat z popisu globální tabulky barev, ale soubor má vlastní lokální tabulku platnou jen pro tento obrázek - to právě umožňuje překonat zdánlivé omezení barevného rozlišení globálního popisu. Vlastní lokální tabulka barev je organizovaná stejně jako globální tabulka.
    - stav bitu 6 (interlace Flag) určuje, jak jsou uložené horizontální řady bodů obrázku - či postupně, kontinuálně za sebou shora dolů (když je bit nastaven na 0), anebo překládání (když je bit nastaven na 1). V překládacím módu je obraz uložený tak, že se zobrazí celý až po čtyřech přechodech obrazovkou. Při prvním přechode se zobrazí každý osmý řádek a každý následující přechod přidá řádek mezi řádky už zobrazené, např.:

    • 1. přechod - 0, 8, 16, 24, 32, ...
    • 2. přechod - 4, 12, 20, 28, ...
    • 3. přechod - 2, 6, 10, 14, 18, ...
    • 4. přechod - 1, 3, 5, 7, 9, 11, 13, ...

    - bit 5 (Sort Flag), když je nastavený lokální tabulka barev je sestupně setříděná.

    - bity 3 a 4 jsou rezervované.

    - bity 0 až 2 (Size of Local Color Table) nesou informaci o velikosti lokální tabulky barev. Platí vztah:
    velikost tabulky v bytech =3*2(délka LCT+1)

    Obsah každého obrázku je uložen jako posloupnost za sebou následujících hodnot. Abychom z uložených údajů dostali původní obrazovou informaci, čteme jednotlivé posloupnosti sekvenčně za sebou. Ale tyto údaje se ještě nedají přímo zobrazit - jsou totiž v zkomprimované podobě a musí se rozbalit. Komprimace a dekomprimace je založena na principu tzv. LZW algoritmu. Je to stejný algoritmus jaký je použit ve známých komprimačních programech PKARC a PKZIP americké firmy PKWARE. Komprimace dokáže ušetřit 50-80% diskového prostoru.

    Komprimované údaje se ukládají do bloků s délkou 255 bytů. V první slabice bloku je uložena informace o délce bloku. Jestliže je délka nulová, je aktuální částečný obrázek ukončený. Vždy před prvním blokem údajů se ještě přenáší 1 byte důležité informace - počáteční velikost v kódu (šířce v bitech), s kterou LZW algoritmus startuje. Pro účely rozšíření funkcí vyšších verzích formátu GIF byl do definice formátu zařazený i tzv. rozšiřovací blok (GIF Extension Block). Jeho struktura je:

    Tento nepovinný blok začíná oddělovačem 21h. Každý programátor, který chce se standardem GIF pracovat, by měl schopný tento blok ve svém programu rozeznat, a pokud ho nechce používat, aspoň ho obejít. Druhý byte GIF Extension bloku identifikuje o jaký typ rožšíření jde. Verze GIF 89a má definované 4 možné rozšíření:

    • blok rozšíření grafické kontroly (Graphic Control Extension), identifikační kód F9h. Tento blok se používá výhradně společně s blokem popisu obrázku (a vždy ho předchází). Nese další informace o tom, jak interpretovat grafickou informaci. Např. jestli bude v průběhu vykreslování obrázku nějaké časové zpoždění, anebo jestli se bude čekat na vstup uživatele.
    • blok komentářů (Comment Extension), identifikuje se kódem FEh. Blok nese textové informace, které se nezobrazují.
    • blok grafického textu (Plain Text Extension), identifikuje se kódem 01h. Tento blok nese textové informace, které se mají zobrazit (kromě vlastního textu v ASCII ještě informaci o umístění a velikosti textu).
    • aplikační blok (Application Extension), identifikační kód FFh. Blok je připravený pro uživatelské aplikace.

    Konec každého Extension bloku je jednoznačně určený znakem 00h.

    Oddelovač EXTENSION bloku - 21h

    Identifikační kód bloku

    Obsah a velikost této části závisí na typu rozšíření

    Koncový znak 00h

    Tab 1.5 Rozšiřující blok formátu GIF

    Soubory ve formátu GIF se dají díky své struktuře a způsobu postupné komprimace a dekomprimace údajů přenášet rovněž interaktivně. Pro tyto účely byly navrhnuté řídící sekvence GCE (GIF Capabilities Enquiry) a GCR (GIF Capabilities Response). Přenášené údaje jsou osmibitové a technické zařízení musí být schopné přenést všech 256 kódů.