PNG is Not GIF

Pavel Tišnovský 7. 9. 2006

Na četná přání čtenářů dnes navazujeme na krátký seriál věnovaný grafickému formátu GIF a budeme pokračovat v popisu dalších populárních a často používaných grafických formátů. Dnešní část bude věnována pravděpodobně nejpovedenějšímu binárnímu grafickému formátu současnosti, který se nazývá PNG.

Obsah

1. Úvodní informace o grafickém formátu PNG
2. Vznik a účel PNG
3. Vlastnosti formátu PNG
4. Typy ukládaných rastrových obrazů
5. Filtry aplikované na obrázek před komprimací
6. Průhlednost
7. Prokládání pixelů
8. Gamma faktor, barevnost a barevné profily ICC
9. Obsah dalšího pokračování seriálu

1. Úvodní informace o grafickém formátu PNG

Grafický formát PNG je souborový formát určený pro ukládání, přenos i zobrazování rastrových obrázků, tj. obrázků, ve kterých je grafická informace uložena v pravidelné mřížce složené z jednotlivých elementárních grafických plošek nazývaných pixely. Pixely nesou informace o své barvě, popř. i průhled­nosti a u PNG mezi nimi není stanoven žádný implicitní vztah (narozdíl od mnoha pseudoformátů nazývaných RAW). Obrázky jsou při použití PNG ukládány ve zkomprimované podobě, přičemž použitý komprimační algoritmus je bezeztrátový, tj. ani při ukládání ani při načítání či přenosu obrázku nedochází ke ztrátám obrazové informace.

Tento grafický formát má mnoho vlastností, které ho předurčují pro použití v pre-pressu, zpracování fotografií, prezentaci obrázků na webu atd. Mezi nejvýznamnější vlastnosti patří volitelná bitová hloubka (ta určuje maximální počet barev), ukládání průhlednosti pixelů (alfa kanál), prokládání pixelů umožňující rychlé náhledy na obrázek, podpora barvových profilů apod. Tyto vlastnosti si postupně popíšeme v dalším textu. Na rozdíl od dalších formátů s podobnými vlastnostmi (zejména TIFFem) je PNG velmi jednoduchým formátem, u kterého je přesně známo, které vlastnosti musí dodržet každý program, který PNG načítá, ukládá či zobrazuje.

2. Vznik a účel PNG

V úvodní části seriálu o grafickém formátu GIF jsme si řekli, že v druhé půli prosince roku 1994 došlo k domluvě mezi firmami Unisys (držitelem patentu na poměrně malou část algoritmu LZW) a CompuServe (vlastníkem a popularizátorem značky GIF) k dohodě, která měla, jak se později ukázalo, velký dopad na prakticky všechny výrobce aplikací využívajících populární grafický formát GIF. Vzhledem k tomu, že poplatky za použití GIFu se – po několika úpravách licence – začaly mimo velkých firem vztahovat i na programátory vyvíjející shareware, freeware a programy šířené pod různými volnými licencemi (GPL atd.), vyvolala tato licenční politika firemního dua Unisys+CompuServe na Internetu bouři nevole, která doslova několik dní po rozšíření informací o nutnosti platby licenčních poplatků vyvrcholila akcí „Burn All GIFs“, do které se zapojily jak jednotlivci na svých osobních stránkách, tak i velké softwarové firmy. Pozůstatky po této akci můžeme dodnes nalézt na mnoha webových stránkách.

Dne 16.1.1995 zahájila firma CompuServe, ve snaze o udržení vedoucí pozice mezi vývojáři grafických formátů, práci na novém formátu GIF, který měl mít oproti „původnímu“ GIFu, tj. oproti verzím GIFu 87a a GIFu 89a dvě poměrně závažné změny. První změnou bylo, že nový formát neměl být zatížený patenty (konkrétně se uvažovalo o komprimačním algoritmu LZ77, který měl nahradit LZW), druhou změnou bylo rozšíření maximálního počtu barev z 256 na 16 milionů (true color). Nový formát měl mít jméno GIF24 a předpokládalo se, že díky svým vlastnostem nahradí jak původní obrázky uložené v GIF 87a či GIF89a, tak i některé obrázky, které musely být ukládány do ztrátového formátu JPEG (přesněji JFIF).

Paralelně s vývojem grafického formátu GIF24 však na Usenetových diskusních skupinách comp.compression a comp.graphics začal za účasti množství odborníků na počítačovou grafiku a komprimaci velmi spontánně vznikat návrh zcela nového grafického formátu, který by s sebou nenesl žádné zbytečné nedostatky a „berličky“ z minulosti, nebyl by zatížen patenty, nebyl by přímo vázán na nějakou firmu a v mnoha směrech by technologicky vylepšoval stávající grafické formáty (v té době se jednalo zejména o GIF a JPEG). Heslem nového formátu, který byl nejprve pojmenován PBF (Portable Bitmap Format) a posléze PNG, se stalo: better, smaller, more extensible, and free.

Návrh grafického formátu PNG, na němž má lví podíl „benevolentní diktátor“ Thomas Boutell (o něm si řekneme příště více zajímavých informací), byl vytvořen doslova v několika dnech a přesto se jedná o prakticky nejlépe navržený grafický formát současnosti! Skupina odborníků i osob z řad uživatelů, kteří formát spoluvytvářeli, se nazývá PNG Group, v některých pramenech také PNG Development Group. Mezi nejvýznamnější členy této skupiny patří samozřejmě Thomas Boutell, dále pak Scott Elliott, Mark Adler, Tom Lane, Oliver Fromme, Greg Roelofs, Paul Haeberli, Jonathan Shekter a spolu s nimi mnoho dalších, spíše neznámých členů, jejichž vliv spočíval především v návrzích vlastností vznikajícího formátu.

Zkratka PNG dnes oficiálně znamená Portable Network Graphics, avšak ti, kteří znají celé pozadí kauzy GIF a vývoje formátu PNG, si zkratku vykládají jako PNG is Not GIF. Podobné rekurzivní zkratky s negací jsou ve světě počítačů velmi oblíbené, například GNU – GNU is Not Unix, MiNT – MiNT is Not TOS apod. (MiNT se však později vykládalo jako MiNT is Now TOS :-), a pro GNU to, s ohledem na dnešní situaci komerčních Unixů, vlastně platí také.

Nový grafický formát PNG byl už ve své verzi 1.0 poměrně rychle mnohými světovými organizacemi přijat jako standard: 1.6.1996 jako W3C Proposed Recommendation, 11.6.1996 jako RFC, prvního října 1996 ho konečně schválilo a doporučilo W3C a čtrnáctého října 1996 IANA (Internet Assigned Numbers Authority) oficiálně zavedla nový MIME typ image/png a spolu s ním i upravila příslušné RFC.

3. Vlastnosti formátu PNG

Jak jsme si již řekli v první kapitole, obsahuje grafický formát PNG mnoho unikátních vlastností, díky nímž se stal prakticky nejlépe vybaveným grafickým formátem dneška v oblasti bezeztrátové komprimace. Jedinou výjimkou jsou dvoubarevné obrázky, pro které může být v některých případech výhodnější používat některou z komprimací navržených CCITT (ty jsou implementovány například ve formátu TIFF). Pojďme si nyní ty nejdůležitější vlastnosti grafického formátu PNG popsat.

4. Typy ukládaných rastrových obrazů

PNG podporuje celkem tři typy rastrových obrazů:

  1. Prvním podporovaným typem jsou obrázky uložené ve stupních šedi (grayscale images nebo také greyscale images). Pro tento typ obrázků platí, že hodnota každého pixelu vyjadřuje procentuální světlost mezi 0% (zcela černá) a 100% (čistě bílá). Pro většinu případů dostačuje osmibitová barevná hloubka, při jejímž použití je možné rozeznat 256 odstínů šedi; specializované aplikace (medicína apod.) však mohou využít i šestnáctibitovou barevnou hloubku, kdy se rozlišuje celých 65536 odstínů šedi (lidské oko prý za vhodných světelných podmínek rozliší cca 9000 odstínů šedi, ale vzhledem k dalším ztrátám dynamiky barev kvůli chybějící či špatně aplikované gamma korekci je mnohdy nutné použít všech 65536 odstínů). Pro obrázky uložené ve stupních šedi není zapotřebí specifikovat barvovou paletu, čímž se ušetří cca 780 bytů v případě 256 odstínů.
  2. Druhým podporovaným typem obrázků jsou obrázky nazývané truecolor images. Jak již z názvu těchto obrázků vyplývá, je možné každému pixelu přiřadit prakticky libovolnou barvu. Vzhledem k tomu, že PNG je založeno na barvovém modelu RGB, je každá barva specifikována pomocí tří koeficientů – podílů základních barev R (Red), G (Green) a B (Blue). Počet bitů, které v každém pixelu slouží pro uložení těchto koeficientů, určuje i celkovou bitovou hloubku obrazu. Běžně se používá 24bitová hloubka, při které je možné rozlišit 16777216 barev (cca 16 milionů), PNG však podporuje i 48bitovou hloubku, ve které se rozlišuje dokonce 2814749767106­56 různých barev, což představuje neskutečných 280000 miliard barevných odstínů. Tato bitová hloubka se uplatní zejména při úpravách obrazu, samozřejmě za předpokladu, že stejnou bitovou hloubku podporuje i grafický editor, což stále ještě není obvyklé.
  3. Třetím a současně i posledním podporovaným typem obrázků jsou obrázky s barvovou paletou (colormapped images resp. indexed color images), ve kterých není každému pixelu uloženému v rastru přiřazena přímo nějaká barva, ale „pouze“ index do barvové palety. Teprve tato paleta obsahuje seznam všech barev, ze kterých se obrázek může skládat. Kromě jednotlivých barvových složek RGB může být v barvové paletě uložena i průhlednost, což znamená, že u obrázků s 256 barvami je možné použít plný alfa kanál. Pro některé účely jsou obrázky s barvovou paletou vhodnější než obrázky ve stupních šedi či obrázky plnobarevné – jedná se například o grafy, pérovky, loga apod.

5. Filtry aplikované na obrázek před komprimací

Jak grafický formát GIF, tak i PNG používá bezeztrátovou komprimační metodu založenou na hledání stejných posloupností v datech reprezentujících rastr pixelů. Obě komprimační metody (LZW a deflate) jsou však poměrně „hloupé“ v tom smyslu, že pouze sériově zpracovávají přicházející data a neudělají si dopředu kompletní představu o barvových a prostorových vlastnostech celého obrázku. Z tohoto důvodu obsahuje grafický formát PNG jednu velmi zajímavou a prospěšnou funkci – na každý obrazový řádek je možné ještě před jeho komprimací aplikovat jednoduchý konvoluční filtr, jehož úkolem je předpřipravit data tak, aby se komprimovala lépe. Většinou se počítá s tím, že se po aplikaci filtru (který většinou hledá podobnosti sousedních pixelů) v datech objeví větší množství pixelů s nulovou hodnotou, nebo hodnotou alespoň blízkou nule, čímž se statisticky zvýší pravděpodobnost toho, že komprimační program v datech nalezne delší shodné posloupnosti a tím zmenší výslednou délku souboru.

Filtrů, které je na jednotlivé obrazové řádky možné aplikovat, existuje v PNG několik, přičemž však není v současnosti známý žádný sofistikovaný algoritmus, který by zjistil, jaká kombinace filtrů vede k nejmenší velikosti výsledného souboru. Z tohoto důvodu se některé programy určené k optimalizaci grafických souborů typu PNG (například známý pngcrush) uchylují k metodám hrubé síly a přitom vykazují poměrně dobré výsledky – není výjimkou, že pngcrush zmenší velikost souboru PNG vygenerovaného jiným programem i o 10%, ovšem čas komprimace se zvyšuje až stonásobně. I popisem filtrů se budeme zabývat v následujících částech tohoto seriálu.

6. Průhlednost

Jednou z největších předností grafického formátu PNG je plná podpora průhlednosti, nazývané také alfa kanál (transparency, alpha channel). Podle typu ukládaného obrázku (viz čtvrtou kapitolu) je možné buď přímo každému pixelu umístěnému v rastrové mřížce nebo každé barvě uložené v barvové paletě přiřadit hodnotu průhlednosti. Podporován je jak plný osmibitový či dokonce šestnáctibitový alfa kanál (256 či 65536 stupňů průhlednosti, tj. hodnot α), tak i „jednobitová“ průhlednost známá už z grafického formátu GIF.

Další dva v současnosti nejpoužívanější grafické formáty průhlednost buď vůbec nepodporují (to je případ JPEGu, kde by průhlednost ani nebylo možné korektně implementovat), nebo podporují pouze „jednobitovou“ průhlednost (GIF), kterou však není možné použít ve všech případech, zejména ne pro obrázky, které mají být zobrazované na libovolném pozadí. O průhlednosti bude řeč v dalších pokračováních tohoto seriálu, zde pouze uvedu fakt, že jeden z nejrozšířenějších webových prohlížečů (MSIE) má s průhledností PNG obrázků velké problémy a jejich korektní zobrazování je možné pouze po použití platformově závislého filtru. Ostatní webové prohlížeče, založené například na jádru Gecko, s běžnými PNG vesměs žádné problémy nemají.

7. Prokládání pixelů

Jak bezeztrátový grafický formát GIF, tak i ztrátový formát JPEG obsahují podporu pro postupné zobrazování částí obrázků už v době jejich postupného načítání či přenosu po datové síti. Grafický formát GIF umožňuje, aby se nejprve ukládaly a následně zobrazovaly obrazové řádky v rozdílném pořadí – nejprve každý osmý řádek, ve druhém kroku každý čtvrtý řádek, posléze zbývající sudé řádky a nakonec všechny řádky liché. JPEG naproti tomu nabízí takzvaný progresivní režim, při kterém jsou nejprve přenášeny koeficienty s nízkou frekvencí a teprve poté koeficienty s frekvencí vyšší. Obojí způsob má za následek to, že se při přenosu obrázku na pomalých či lagujících linkách nejprve zobrazí hrubý náhled, který je posléze zjemňován. Uživatel tak má již při přenosu poměrně malé části dat (v případě GIF jedné osminy, u JPEGu cca jedné dvacetiny) možnost udělat si představu o celém obrázku a popř. přenos zastavit (ve webových prohlížečích většinou klávesou ESC).

Způsob prokládání pixelů (interlacing, progressive display), který je implementován v grafickém formátu PNG, vznikl vylepšením řádkového prokládání použitého u formátu GIF. Zatímco se u GIFu je prokládání nesymetrické, protože je prováděno pouze ve vertikálním směru, je u PNG použito zcela symetrické prokládání, tj. pixely jsou ukládány „napřeskáčku“ jak ve směru horizontálním, tak i ve směru vertikálním. Symetrický způsob přináší tu výhodu, že prvotní náhled na obrázek je možné provést již po přenesení pouhé 1/64 všech pixelů, zatímco u GIFu to byla celá 1/8 pixelů. S respektováním určité nepřesnosti (přenos hlaviček, rozdíly díky aplikaci komprimace) je tedy možné říci, že náhled na obrázek uložený ve formátu PNG je až osmkrát rychlejší, než náhled na obrázek typu GIF. Je však nutné poznamenat, že změna posloupnosti ukládaných pixelů má negativní vliv na komprimační poměr, protože se statisticky zmenšuje korelace mezi sousedními hodnotami.

8. Gamma faktor, barevnost a barevné profily ICC

Při zobrazování rastrových obrázků na různých počítačových platformách (PC, SGI, Sun, Macintosh) či na televizní obrazovce si můžeme všimnout, že zatímco je obrázek na jedné platformě příliš tmavý, na jiné platformě je zase moc světlý, přičemž dochází ke splývání nejsvětlejších nebo nejtmavších barevných odstínů. Pokud se například obrázek vytvořený na Macintoshi přenese na PC, je při zobrazení většinou velmi tmavý a naopak. Je to způsobeno rozdílným nastavením takzvaného koeficientu gamma. Většina zobrazovacích zařízení (CRT, LCD) je totiž nelineární v tom smyslu, že na lineární změnu signálu na svém vstupu reagují nelineární změnou světlosti zobrazovaných pixelů. Také lidské oči (ale i uši) reagují na své „vstupy“ nelineárně, takže je mnohdy složité korektně přenést a zobrazit obrázky v celé své barevné škále.

Právě zde přichází ke slovu takzvaná „gamma korekce“, jejímž účelem je obrázek před jeho zobrazením předpřipravit tak, aby po průchodu celým zobrazovacím řetězcem zůstala v co největší míře zachována linearita. V grafickém formátu PNG je možné uchovat gamma faktor zařízení, které obrázek vytvořilo (skener, fotoaparát, počítačový program). Při zobrazování se na základě tohoto gamma faktoru mohou intenzity pixelů přepočítat a dosáhnout tak kýžené linearity. Důležité je, že gamma korekci je možné provádět beze změny hodnot pixelů původního obrázku, takže při úpravách a přenosu na další platformu nedochází ke ztrátě dynamiky barev.

Pro profesionální barevný tisk však samotná informace o gamma korekci nemusí být dostačující, protože každý barvový kanál (RGB) může vykazovat jinou nelinearitu, která může vést buď ke ztrátě dynamiky barev nebo dokonce k celkovému rozpadu spektra. Zde přichází ke slovu změna barevnosti (chromacity) prováděná v barvovém prostoru x-y definovaném konsorciem CIE (Commission Internationale de L'Eclairage resp. Interna­tional Commission on Illumination) a kompletní barevné profily ICC. Oboje je v grafickém formátu PNG podporováno, o čemž se budeme moci přesvědčit v některém z následujících částí tohoto seriálu. Při prohlížení obrázků umístěných na webu se většinou setkáme pouze s ukládanou informací o gamma korekci, plný barevný profil ICC je spíše výjimkou a mnohdy i zbytečným luxusem, který zvětšuje celkovou velikost souboru i o stovky bytů (typicky se jedná o hodnoty 200–300 bytů v závislosti na množství informací uložených v ICC profilu).

V souvislosti s použitím grafického formátu PNG v pre-presu a profesionálním barevném tisku je nutné říci, že PNG je takřka výhradně postaveno na barvovém modelu RGB, takže není možné pracovat (tj. ukládat barvy pixelů) přímo v jiném barvovém modelu, a to ani s CIE XYZ či CMYKem. V případě, že je CMYK nutné z nějakého důvodu použít, je vhodné uvažovat o jiném grafickém formátu, například o TIFFu, který CMYK v některých svých režimech přímo podporuje. Díky existenci barevných profilů však potřeba přímého použití CMYKu v souborových formátech není tak velká, takže spíše záleží na vlastnostech použitých aplikací i tiskových zařízení a ne přímo na použitém barvovém režimu.

9. Obsah dalšího pokračování seriálu

V následujícím pokračování tohoto seriálu si ukážeme, jak vypadá interní struktura grafického formátu PNG. Popíšeme si hlavičku PNG, formát jednotlivých chunků (pojmenovaných datových bloků) a také to, jak jsou binárně zapsány jednoduché rastrové obrázky typu PNG.

Anketa

Máte raději PNG nebo GIF?

Našli jste v článku chybu?
120na80.cz: Jak se zbavit nadměrného pocení?

Jak se zbavit nadměrného pocení?

Měšec.cz: TEST: Vyzkoušeli jsme pražské taxikáře

TEST: Vyzkoušeli jsme pražské taxikáře

Měšec.cz: Co s reklamací, když e-shop krachuje?

Co s reklamací, když e-shop krachuje?

Měšec.cz: Ceny PHM v Evropě. Finty na úspory

Ceny PHM v Evropě. Finty na úspory

DigiZone.cz: CZ a SK Digi TV budou spolupracovat

CZ a SK Digi TV budou spolupracovat

Podnikatel.cz: Co vše musíte udělat, než vypukne EET?

Co vše musíte udělat, než vypukne EET?

DigiZone.cz: Sat novinky: pátý kanál maďarské televize

Sat novinky: pátý kanál maďarské televize

Lupa.cz: Tudy proudí váš hlas i data. V zákulisí CETINu

Tudy proudí váš hlas i data. V zákulisí CETINu

Vitalia.cz: Cvičení tabata: na hubnutí i posilování?

Cvičení tabata: na hubnutí i posilování?

Lupa.cz: Největší pitominy s logem “nyní smart a připojené”

Největší pitominy s logem “nyní smart a připojené”

DigiZone.cz: Skylink o půlnoci vypnul 12 525

Skylink o půlnoci vypnul 12 525

Lupa.cz: Největší torrentový web KickassTorrents padl

Největší torrentový web KickassTorrents padl

Podnikatel.cz: Od baletu k požární ochraně. A jiné rarity

Od baletu k požární ochraně. A jiné rarity

DigiZone.cz: Hra o trůny: natáčení 7. řady posunuto

Hra o trůny: natáčení 7. řady posunuto

Vitalia.cz: Bio vejce nepoznají ani veterináři

Bio vejce nepoznají ani veterináři

Vitalia.cz: Taky je nosíte? Barefoot není pro každého

Taky je nosíte? Barefoot není pro každého

Vitalia.cz: Nejdůležitější změny v potravinářské novele

Nejdůležitější změny v potravinářské novele

Vitalia.cz: Signál roztroušené sklerózy: brnění končetin

Signál roztroušené sklerózy: brnění končetin

Podnikatel.cz: Tahle praktika stála šmejdy přes milion

Tahle praktika stála šmejdy přes milion

Vitalia.cz: Dermatolog radí: Pozor na citrusové vůně

Dermatolog radí: Pozor na citrusové vůně