aspose.info
CS

Formát souboru PNG - soubor rastrového obrázku

Aktualizováno

Co je soubor PNG?

Soubor PNG (Portable Network Graphics) je formát rastrového obrázku, který používá bezztrátovou kompresi. Tento formát souboru byl vytvořen jako náhrada formátu Graphics Interchange Format (GIF) a nemá žádná omezení autorských práv. Formát souboru PNG však animace nepodporuje. Formát souboru PNG podporuje bezeztrátovou kompresi obrázků, díky čemuž je mezi uživateli oblíbený. S postupem času se PNG vyvinul jako jeden z široce používaných formátů souborů obrázků.

Stručná historie formátu souboru PNG

Hlavním důvodem pro vytvoření formátu souboru PNG byl patentovaný kompresní algoritmus Lempel-Ziv-Welch používaný ve formátu GIF. To spolu s dalšími omezeními GIF vyvolalo potřebu nahradit formát souboru GIF. První návrh a název pro formát souboru PNG přišel v lednu 1995. Klíčové události týkající se formátů souborů PNG jsou uvedeny níže:

  • Říjen 1996: Specifikace PNG verze 1.0 byly vydány a později se objevily jako RFC 2083. Totéž se stalo doporučením W3C v říjnu 1996. Prosinec 1998: Byla vydána verze 1.1 s některými malými změnami a přidáním tří nových kusů.
  • Srpen 1999: Byla vydána verze 1.2 s přidáním jednoho kousku navíc. Listopad 2003: PNG se stal mezinárodním standardem (ISO/IEC 15948:2003). Tato verze PNG se od verze 1.2 liší jen mírně a nepřidává žádné nové kousky.
  • Březen 2004: ISO/IEC 15948:2004

Funkční srovnání GIF a PNG

Formát souboru PNG byl navržen tak, aby byl jednoduchý a přenosný, právně nezatížený, zaměnitelný, flexibilní a robustní. V následující tabulce jsou uvedeny funkce GIF, které jsou kromě nových funkcí zděděny formátem souboru PNG.

FunkceGIFPNG
Indexové barevné obrázky až 256 barevAnoAno
Podpora streamováníAnoAno
TransparentnostAnoAno
Doplňkové informaceAnoAno
Nezávislost na hardwaru a platforměAnoAno
EfektivníAnoAno
Truecolor obrázky až 48 bitů na pixelNeAno
Obrázky ve stupních šedi až 16 bitů na pixelNeAno
Úplný alfa kanál (obecné masky průhlednosti)NeAno
Informace o gama obrazuNeAno
SpolehlivostNeAno
Rychlejší úvodní prezentaceNeAno

Struktura souboru PNG

Téměř všechny operační systémy podporují otevírání souborů PNG. Například prohlížeč Microsoft Windows má schopnost otevírat soubory PNG, protože OS má standardně podporu dostupnou jako součást instalace. Soubor PNG se skládá z podpisu PNG následovaného řadou //dílů//.

Záhlaví souboru PNG

Prvních osm bajtů souboru PNG vždy obsahuje následující (desítkové) hodnoty:

{{{137 80 78 71 13 10 26 10 }}}

Tento podpis označuje, že zbytek souboru obsahuje jeden obrázek PNG, skládající se z řady částí začínajících částí IHDR a končící částí IEND.

Kousky

Každý kus se skládá ze čtyř částí:

Length: 4bajtové celé číslo bez znaménka udávající počet bajtů v datovém poli bloku. Délka počítá pouze datové pole, ne sama sebe, kód typu bloku nebo CRC. Nula je platná délka. Ačkoli by kodéry a dekodéry měly délku považovat za bez znaménka, její hodnota nesmí přesáhnout 231 bajtů.

Typ bloku: 4bajtový kód typu bloku. Pro usnadnění popisu a zkoumání souborů PNG jsou typové kódy omezeny na to, že se skládají z velkých a malých písmen ASCII (AZ a az, nebo 65-90 a 97-122 desítkové). Kodéry a dekodéry však musí s kódy zacházet jako s pevnými binárními hodnotami, nikoli se znakovými řetězci. Například by nebylo správné reprezentovat typový kód IDAT ekvivalenty EBCDIC těchto písmen. Další konvence pojmenování pro typy bloků jsou popsány v další části.

Chunk Data: Datové bajty odpovídající typu bloku, pokud existují. Toto pole může mít nulovou délku.

CRC: 4bajtový CRC (Cyclic Redundancy Check) vypočítaný z předchozích bajtů v bloku, včetně kódu typu bloku a datových polí bloku, ale bez pole délky. CRC je vždy přítomen, dokonce i pro bloky neobsahující žádná data.

Délka dat bloku může být libovolný počet bajtů až do maxima; implementátoři proto nemohou předpokládat, že bloky jsou zarovnány na hranicích větších než bajty.

Bloky se mohou objevit v libovolném pořadí, s výhradou omezení kladených na jednotlivé typy bloků. (Jedním významným omezením je, že IHDR se musí objevit jako první a IEND jako poslední; blok IEND tedy slouží jako značka konce souboru.) Může se objevit více bloků stejného typu, ale pouze pokud je to pro tento typ výslovně povoleno.

Typy bloků

Typy bloků jsou rozděleny do kategorií Kritické a Doplňkové na základě 4bajtové hodnoty ASCII, která je přiřazena typu bloku. Všechny implementace musí porozumět a úspěšně vykreslit standardní kritické části. Platný obrázek PNG musí obsahovat blok IHDR, jeden nebo více bloků IDAT a blok IEND.

Komprese

Metoda komprese PNG 0 (jediná metoda komprese v současnosti definovaná pro PNG) specifikuje kompresi deflate/inflate s posuvným oknem o velikosti nejvýše 32768 bajtů. Deflate komprese je derivát LZ77 používaný v programech zip, gzip, pkzip a souvisejících programech. Byl proveden rozsáhlý výzkum podporující jeho status bez patentů. Komprimovaná data v datovém toku zlib jsou uložena jako série bloků, z nichž každý může představovat nezpracovaná (nekomprimovaná) data, data komprimovaná LZ77 kódovaná pevnými Huffmanovými kódy nebo komprimovaná data LZ77 kódovaná vlastními Huffmanovými kódy. Bit markeru v posledním bloku jej identifikuje jako poslední blok, což umožňuje dekodéru rozpoznat konec komprimovaného datového toku.

Předkompresní filtrování

K přípravě obrazových dat na optimální kompresi se používají předkompresní filtry. Metoda filtrování PNG definuje pět základních typů filtrů takto:

Typ filtruNázevPředpokládaná hodnota
0ŽádnýSkenovací řádek je přenášen nezměněný
1SubPřenese rozdíl mezi každým bajtem a hodnotou odpovídajícího bajtu předchozího pixelu.
2NahoruFiltr Up() je stejný jako filtr Sub() s tím rozdílem, že jako prediktor se používá pixel bezprostředně nad aktuálním pixelem, nikoli jen vlevo od něj.
3PrůměrFiltr Average() používá průměr dvou sousedních pixelů (vlevo a nahoře) k předpovědi hodnoty pixelu.
4PaethFiltr Paeth() vypočítá jednoduchou lineární funkci tří sousedních pixelů (vlevo, nahoře, vlevo nahoře) a poté vybere jako prediktor sousední pixel, který je nejblíže vypočtené hodnotě.

Algoritmy filtrování se aplikují na „bajty“, nikoli na pixely, bez ohledu na bitovou hloubku nebo barevný typ obrázku. Filtrační algoritmy pracují na bajtové sekvenci tvořené skenovacím řádkem. Pokud obrázek obsahuje alfa kanál, jsou alfa data filtrována stejným způsobem jako obrazová data.

Když je obraz prokládaný, každý průchod prokládaného vzoru je pro účely filtrování považován za nezávislý obraz. Filtry pracují na bajtových sekvencích tvořených pixely skutečně přenášenými během průchodu a „předchozí skenovací řádek“ je ten, který byl předtím přenesen ve stejném průchodu, nikoli ten, který sousedí v úplném obrazu. Všimněte si, že dílčí obraz přenášený jedním průchodem je vždy obdélníkový, ale má menší šířku a/nebo výšku než celý obraz. Když je tento dílčí obrázek prázdný, filtrování se nepoužije.

Reference

Viz také