|
DETAILNÍ POPIS FORMÁTU GIFGrafický 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ů.
|