Hlavní navigace

Grafika v UNIXu - další bitmapové formáty

14. 1. 2002
Doba čtení: 5 minut

Sdílet

Dnes se podíváme na další bitmapové formáty – GIF, PNG, JNG, MNG, BMP, ICO a JBIG. Povíme si něco o možnostech úspory místa na disku volbou správného formátu a srovnáme kvalitu jednotlivých kompresí na typických příkladech.

Pokud připravujeme data pro vystavení na WWW, výběr formátu se zužuje. Kromě formátu JPEG lze zaručit nejvýše podporu formátu GIF. U novějších prohlížečů připadá v úvahu i nástupce GIFu, formát PNG. Podpora animovaného PNG, formátu MNG, je zatím v plenkách.

GIF

Podobně jako jiné formáty, i GIF prošel vývojem. Dnešní verze zvaná GIF89a nahradila starší verzi GIF87a. Podporuje pouze 256 barev, ale zato podporuje průhlednost a může obsahovat více vrstev, které lze interpretovat jako animace. Při vzniku WWW se vedle JPEGu stal hlavním a dlouhou dobu i jediným grafickým formátem s alespoň malou podporou pohybu. Protože GIF podporuje pouze kompresi LZW, dostal se do problémů, když proti ní firma Unisys zahájila své patentové tažení (nutno ovšem podotknout, že z licenčních poplatků ani jeden z trojice Lempel –Ziv –Welch nic nemá, neboť patentovaná je jen drobná úprava při spojení jejich metod).

Co GIF nabízí? Základní strukturou je popis logické obrazovky, jednotlivé popisy obrázků a jednotlivá datová pole. Do souboru lze uložit osmibitová grafická data a palety. Jedna z barev palety může být průhledná. Dalšími údaji jsou souřadnice levého horního rohu, časový posun při animaci a dispozice (údaj, zda předchozí úsek animace bude nahrazen nebo připojen). Tyto údaje mohou být vzhledem k jednotlivé vrstvě globální nebo lokální.

Z neobrazových informací může GIF obsahovat rozšíření (kromě grafického rozšíření je k dispozici komentář, textové a aplikační rozšíření). Mimoto je uložen použitý poměr stran pixelu.

Obdobou progresivního ukládání dat JPEG je prokládaný GIF. Stejný algoritmus více průchodů se stále hustším výběrem podvzorku je použit na celé řady pixelů.

PNG

PNG byl navržen jako přenositelný formát pro síť, bez použití patentů. Měl nahradit stávající GIF. PNG je bezztrátový a ke kompresi dat používá speciální schéma, zakončené známou kompresí ZIP/Deflate. Kromě toho, že není patentována, komprimuje grafická data většinou lépe než GIF.

Podporuje většinu běžných barevných prostorů, včetně barevných profilů a kolorimetrické specifikace. U indexovaných palet umožňuje přiřadit jednotlivým barvám různou důležitost.

Při tvorbě průhledných obrázků máme kromě průhledné barvy z palety k dispozici též podporu pro alfa kanál, a tedy i poloprůhlednost.

Soubor je sestaven z úseků s daty. K základním neobrazovým datům patří: hodnota gama korekce, poloha vrstvy, rozlišení, čas a dva typy textových úseků. K tvorbě progresivních obrazových dat lze použít prokládání Adam7. Úspory dat lze docílit vymazáním průhledných úseků.

MNG a JNG

Poměrně nové MNG a JNG v sobě kombinují možnosti PNG a JPEG, a vytvářejí tak nové formáty, umožňující uložit více takových obrázků v jednom souboru a vytvořit z nich animace. K tomu přispívají i různé možnosti kompozice vrstev.

Podpora je zatím dost slabá, i když projekt Mozilla tyto formáty již umí.

BMP a ICO

Tyto poměrně zastaralé formáty se staly neoficiálním „nativním“ formátem Windows a OS/2 (ve skutečnosti se jedná o dva mírně odlišné formáty, oba známé pod názvem BMP). ICO je vlastně obálkou pro několik BMP souborů a používá se na ikony. Podporují jednoduchou průhlednost. Důvod, proč se o nich zmiňuji v souvislosti s UNIXem, je jednoduchý. Firma Microsoft při tvorbě ikon záložek svého Internet Exploreru použila právě formát ICO. Od té doby, co tuto vlastnost „adoptovala“ většina webových prohlížečů, se stal převod do formátu ICO zajímavým i v UNIXu. Po chvíli hledání se mi podařilo najít např. xpm2wico, který to zvládne bez problémů.

JBIG

Přes nespornou zajímavost se tento bezztrátový formát pro černobílou čárovou grafiku nijak výrazně nerozšířil. Umožňuje ukládat černobílou grafiku ve vysokých kompresních poměrech.

EPS

Přesto, že EPS je přednostně formátem pro vektorovou grafiku, je třeba si ho připomenout též jako formát pro bitmapovou grafiku. Hlavním důvodem jeho nenahraditelnosti jsou ořezové cesty. PostScript se špatně vyrovnává s typickou bitmapovou průhledností, a tak bývá v EPS souborech řešena právě ořezovými cestami. Jde vlastně o vektorové obrazce – cesty, které ohraničují neprůhlednou oblast. A jediným přenositelným formátem, jehož součástí může být ořezová cesta, je právě EPS.

Speciální formáty

Mezi neobvyklé formáty obrázků patří např. XPM, ve kterém jsou obrazová data uložena tak, že tvoří zároveň platný zdrojový kód pro C. Ve světě UNIXu se jistě setkáte s formáty PNM (PBM, PGM, PPM), jednoduchými formáty pro přenos obrázků, přenosovým formátem ImageMagicku MIFF či nativním formátem GIMPu – XCF – a jeho obdobou s použitím komprese JPEG – XJT. Všechny však mají omezené pole působnosti a snadno se může stát, že je majitel ne-UNIXové platformy neotevře.

Komprese a velikost souboru

Otázkou, která zajímá každého, kdo častěji pracuje s obrázky, je výsledná velikost souboru. Nelze však dělat ukvapené závěry o kvalitě formátů, neboť každý z nich má jiné určení.

Zhruba 60 % velikosti souboru lze někdy ušetřit obratným použitím indexované palety namísto plných barev, aniž by se to výrazně projevilo na kvalitě (např. u log, náhledů apod.). Jinou možností je občas použít nekomprimovarý obrázek, a ten zabalit běžným archivačním programem. U indexovaných obrázků lze použít optimalizátorů pořadí barev v paletě.

Pro náš test jsem vybral několik typických obrázků – ručně psaný fax v nízké kvalitě, digitálně vytvořený fax v kvalitě Fine, černobílou kresbu v čárové grafice, barevnou fotografii, černobílou verzi téže fotografie a digitální barevnou grafiku. Čísla udávají poměr k velikosti nekomprimovaného obrázku v procentech. U ztrátových kompresí značí zelená barva nepatrnou ztrátu kvality, žlutá přijatelnou a červená nepřijatelnou. Pro zajímavost jsem u indexovaného PNG zvolil převod bez rozkladu, zatímco u GIF Floyd-Steinbergův rozklad.

root_podpora

Tabulka č. 221
  písmo
fax
kresba
čb foto
b. foto
grafika
bez komprese 100,0 100,0 100,0 100,0 100,0 100,0
TIFF LZW 10,8 21,9 22,5 87,1 93,5 19,1
GIF 11,8 24,1 22,3 86,0 22,9 4,9
TIFF Packbits 17,6 29,7 40,8 100,5 100,7 33,5
TIFF Deflate 10,8 18,4 19,7 74,7 75,5 11,3
CCITT FAX G3 9,8 21,1 23,1  —  —  —
CCITT FAX G3–2D 8,8 15,9 12,3  —  —  —
CCITT FAX G4 7,1 13,4 8,5  —  —  —
JBIG 5,9 11,3 6,1  —  —  —
PNG  —  —  — 48,7 43,2 4,8
PNG indexovaný 10,4 16,9 17,8  — 20,0 1,9
JPEG Q30 45,4 86,5 68,1 4,2 1,5 2,7
JPEG Q60 63,9 122,1 98,9 8,3 3,0 3,8
JPEG Q80 81,4 155,4 127,6 15,2 5,6 5,1
JPEG Q95 115,1 220,4 183,9 22,4 8,4 8,2

JPEG je jasným favoritem pro fotografie, ovšem na čárové grafice zcela selhává. Tam naopak bodují JBIG a faxové komprese. U digitální grafiky si nejlépe vede PNG. Pro bezztrátovou kompresi fotografií se osvědčily nejlépe PNG a komprese Deflate. Barevné JPEGy jsou jen o několik desítek procent větší než stejné černobílé JPEGy. Použití rozkladu při převodu na indexované barvy dává lepší výsledky za cenu horšího kompresního poměru.

Byl pro vás článek přínosný?