GIF - Kdy soupeří s JPEGem a kdy ne. - Grafika.cz - vše o počítačové grafice

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Digitální fotografie

GIF - Kdy soupeří s JPEGem a kdy ne.

6. dubna 1998, 00.00 | Velice krátce si povíme o bezeztrátové kompresi gif. Na čem je založeno LZW kódování použité ve formátu gif? Jak dochází k úspoře místa? A mnohé další otázky a odpovědi.

 

Velice krátce si povíme o bezeztrátové kompresi gif. Na čem je založeno LZW kódování použité ve formátu gif? Jak dochází k úspoře místa? Následovně:
Jde o slovníkové kódování s výrobou slovníku během výpočtu. Snažíme se posloupnosti, které se již dříve v datech vyskytovaly podruhé zakódovat již úsporně.
Začínáme takto: Máme dva speciální symboly: novinka a konec bloku. Ty jsou nejdříve ve slovníku velikosti 4. stačí nám 2 bity na zakódování. Čteme znak ze vstupu, dáme ho do slovníku. Čteme další. Pokud ve slovníku není přidáme a pokračujeme tímto způsobem. Pokud je, zapamatujeme si ho a zkusíme číst další znak. Porovnáme zda celá posloupnost obou dvou znaků není ve slovníku. Není? Dáme jí tam.
Postupně se do slovníku dostanou ty znaky, které přišly, a zároveň jejich časté posloupnosti. Samozřejmě že posloupnosti jsou kódovány úsporně tedy tak, že začátek už se vyskytoval a my jen přidáme nový znak.
V jednou okamžiku nám dojdou dvojbitové symboly, v tom okamžení uložíme informaci, že měníme velikost bloku a začneme kódovat trojbitově. Slovník co jsme doposud vytvořili necháme v první polovině. Tak postupujeme až do 12 bitového kódu pak se slovník maže a začíná se znovu.
Samozřejmě tyto informace nestačí k tomu abychom napsali dekódovací program. To ale není cílem. Myslím, že hrubou představu už máme. Jak se tedy bude algoritmus chovat? Když najde velký kus stejné barvy naučí se nejprve barvu rozpoznat. Pak se naučí dvě po sobě jdoucí, pak tři po sobě jdoucí a tak dále. Bude neustále zrychlovat zpracování. nejprve ukousne 1, pak 2, pak 3, 4 body. Tedy po 4 krocích celkem 10. Pak 5,6,7,8,9,10 tedy po 10 krocích 75 bodů. Dosáhly jsme tedy jisté úspory, která zhruba odpovídá tomuto poměru.
Dokáže zakódovat i tečkovanou barvu. Naučí se černou, naučí se bílou, naučí se černou a bílou, pak č,b,č pak b,č pak b,č,b pak č,b,č,b pak č,b,č,b,č atd. i tady začne uhlodávat stále větší kusy stejného vzorku. Zajímavé je porovnání s JPG, které naleznete v dalším odstavci.

Od kolika barev se vyplatí JPG?
Pokusíme se to nějak kvalifikovaně odhadnout. Uděláme tento vstupní předpoklad: Obrázek kódovaný do formátu gif zmenší redundanci dat v obrázku na 1/x. Tato hodnota záleží velice od jednotlivého obrázku. JPG, po provedení ztrátové komprese také používá slovníkové komprese k zmenšení dat. Nechť je tento poměr také 1/x, takže je oba můžeme z úvah vynechat. Také uvažujme že hlavičky obou formátů mají srovnatelnou zanedbatelnou velikost. Takže jak se tyto předpoklady projeví v různých formách obrázku.

Zkusíme udělat úvahu pro černobílý obrázek.
JPG za všech okolností kóduje 256 nebo 4096 odstínů. Méně ne. Řekněme že kompresní poměr při ztrátovosti je 1/4. To jsou obrázky stále při vysoké kvalitě. Tedy obrázek 100x100 bodů ať už má deset nebo 100 barev bude zabírat 10000 / 4 = 2500 byte.
Podíváme se kolik jsme schopni ušetřit snižováním počtu barev u gifu. Začneme na 128 barvách, při 256 je JPG jasně lepší to už víme z minula. 128 barev odpovídá použitým 7 bitům. To je 7/8 to je pořád horší než zvolený poměr JPG 1/4. Výhodu srovnáme až na 2 bitech, což odpovídá 4 barevnému černobílému obrázku.
Samozřejmě můžeme požadovat menší ztrátovost JPG třeba jen 1/2. To už je naprosto perfektní obrázek. To odpovídá 4 bitům, tedy 16 barvám. Rozhodně nemá smysl kódovat do GIFu černobílý obrázek, který má více než 16 barev.
Výsledek GIF má mít 2,4 případně 8 maximálně 16 barev aby byl výhodnější než JPG.

Další úvaha je pro barevný obrázek.
JPG barevné obrázky uchovává opět pouze v 8 nebo 12 bitové barevné hloubce. Barvy z RGB převádí na JAS a barevné složky, přičemž jas kóduje 4x kvalitněji než barvy. Když to vše vezmeme v úvahu zakódujeme barevný obrázek 100x100 bodů v 20 či 200 barvách na 10000 * 3 / 8 = 3750 byte.
Gif používá palety, a proto mu nezáleží na odstínu barvy a kódování probíhá naprosto stejně jako u černobílého obrázku. Tentokrát při JPG kompresi 1/4 odpovídá GIF obrázek o 8 barvách, a pro ty nejkvalitnější JPG obrázky pro člověka beze ztrát je komprese srovnatelná s GIFem o 64 barvách.
U barevných GIF obrázků nastupuje ještě jeden fenomén. Pokud je paleta menší a nebo je 16 barev vejde se do úvodní hlavičky formátu a nemá vliv na délku souboru. Pokud je větší 32, 64, 128, 256. Je nutné jí zaznamenat na konec souboru. 256 barevná paleta zabere 770 byte navíc. To může u malých obrázků být dost znatelné, když uvážíte kolik zabírá JPG 100x100. Kolik má asi velikost JPG 50x50.
Výsledek: Barevný GIF má mít 16 nebo méně barev, aby byl výhodnější než JPG. Maximálně pak 64 barev, ale pouze v případě že obrázek jsou dost veliký.

Tématické zařazení:

 » Rubriky  » Go verze  

 » Rubriky  » Webdesign  

 » Rubriky  » Digitální fotografie  

 

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: