PNG (Portable Network Graphics)
Přípona souboru.png
Typ internetového médiaimage/png
Type codePNGf
PNG
Uniform Type Identifierpublic.png
Magické číslo89 50 4e 47 0d 0a 1a 0a
TvůrcePNG Development Group
První verze1. října 1996
Typ formáturastrová grafika
RozšířeníAPNG, JNG a MNG
Standard(y)ISO 15948, IETF RFC 2083
Otevřený formátano
Websitewww.libpng.org/pub/png
Demonstrace průhlednosti PNG
Barevná kostka s bílým podkladem
Příklad průhledného PNG s 8bitovou průhledností…
Barevná kostka s šachovnicovým podkladem
…nahoře bílé pozadí, dole šachovnice.

PNG (oficiální výslovnost „ping“, Portable Network Graphics, česky přenosná síťová grafika) je rastrový grafický formát s bezeztrátovou kompresí. Byl vyvinut jako zdokonalení a náhrada formátu GIF. PNG nabízí podporu 24 bitové barevné hloubky, nemá tedy jako GIF omezení na maximální počet 256 barev současně. PNG tedy do jisté míry nahrazuje GIF, nabízí více barev a lepší kompresi (algoritmus Deflate + filtry). Navíc obsahuje osmibitovou průhlednost (tzv. alfa kanál), to znamená, že obrázek může být v různých částech různě průhledný (tzv. RGBA barevný model). Nevýhodou PNG oproti GIF je praktická nedostupnost jednoduché animace, pro kterou sice existují 2 návrhy APNG a MNG, které se ale zatím neprosadily.

PNG se stejně jako formáty GIF a JPEG používá na Internetu.

Podle MIME má PNG přidělen typ image/png.

Oficiální referenční implementací formátu je libpng.[1]

Historie a vývoj

Impuls pro vytvoření formátu PNG přišel v roce 1994, kdy po dohodě firem Unisys a CompuServe došlo k licenčnímu zpoplatnění použití formátu GIF. Upravená licence se pak začala vztahovat nejen na velké firmy, ale i na programátory vyvíjející freeware, shareware a také programy šířené pod volnou licencí (GPL). Tato politika vyvolala velkou vlnu odporu, která vyvrcholila akcí „Burn All GIFs“, které se zúčastnily jak velké softwarové firmy, tak samotní programátoři na svých soukromých stránkách.

16. ledna 1995 firma CompuServe zahájila vývoj nového grafického formátu GIF, který měl nahradit stávající GIF. Nový formát pod názvem GIF24 neměl být zatížený patenty (změna komprimačního algoritmu), maximální počet barev měl být zvýšen z 256 na 16 milionů.

Současně s vývojem GIF24, avšak ne u žádné softwarové firmy, se začalo s vývojem naprosto nového formátu, který neměl být vázán žádným patentem ani vztahem k žádné firmě a předčil by tehdejší grafické formáty (především GIF, JPEG). Původní název zněl PBF (Portable Bitmap Format), ale posléze byl změněn na PNG (Portable Network Graphics).

7. března 1995 Glenn Randers-Pehrson zveřejnil úplně první obrázky ve formátu PNG, které jsou i současnými dekodéry čitelné[2] a dostupné na zrcadle.

Chronologie zveřejňování standardu:

Technické detaily

Soubor PNG se skládá z hlavičky souboru a série chunků (datových bloků, doslova kusů, soust nebo špalků).

Hlavička souboru

Hlavička souboru (nikoliv hlavička obrazu – ta bude popsána níže) neboli magické číslo v PNG má délku 8 bytů a je v každém souboru stejná. Hexadecimálně má podobu 89 50 4E 47 0D 0A 1A 0A.

Byte Význam bajtu
89 jedná se o byte s nejvýše nastaveným bitem; detekce podpory 8bitového přenosu dat
50 4E 47 řetězec „PNG“ kódovaný v ASCII; slouží k identifikaci souborového formátu
0D 0A (CR LF) konec řádky v DOSu kódovaný v ASCII; detekce náhrady za jinou sekvenci
1A byte zastavující výpis souboru v DOSu
0A v UNIXu detekce konce přenosu (LF)

Chunky

Každý chunk zprostředkovává jistou informaci o obrazu nebo metadatech. Chunky jsou sémanticky samostatné (přímo se nepojí s jinými částmi souboru). Chunky se rozdělují na „rozhodující“ (critical) a „pomocné“ (ancillary). Rozdělení na chunky dovoluje slučitelnost obrazů PNG se staršími verzemi, stejně jako rozšiřitelnost o případné nové.

Každý chunk se skládá ze čtyř částí: délky obsahu (4 bajty), typu/názvu (4 bajty), samotných dat a kontrolního součtu (4 bajty). Díky tomuto návrhu mohou dekodéry formátu přeskakovat pomocné chunky, aniž by je musely číst; kontrolní součet přispívá k detekci chyb při zpracování.

Typy chunků

Typ je popsán čtyřmi znaky v ASCII (název chunku sestává vždy z písmen) s rozlišením velkých a malých písmen. Použití velkého nebo malého písmena (pátý bit v kódu ASCII) v sobě nese informaci o povaze chunku v případě jeho nerozeznatelnosti.

Rozhodující chunky
Pomocné chunky
Pořadí chunků

Existuje několik pravidel pro pořadí chunků:[5]

Textová metadata

Chunky tEXt, iTXt a zTXt obsahují dvojice položka:hodnota pro textová metadata k obrázku. Předdefinovány jsou tyto položky:

Název výše uvedených, předdefinovaných položek se musí shodovat přesně (i co do velikosti písmen), jinak bude položka chápána jako uživatelsky definovaná. Název položky a její hodnota jsou v chunku odděleny znakem NUL (ASCII hodnota 0). Hodnotou může být cokoli (včetně potenciálně škodlivého kódu), ale prohlížeče a dekodéry by je měly interpretovat jako prostý text.

Komprese

PNG používá bezeztrátovou kompresi se 2 základními kroky:

  1. Filtrování – snaha objevit běžné vzory (např. barevné pruhy, gradienty) pro zvýšení účinnosti dalšího kroku
  2. Komprese – využívá metodu DEFLATE (stejně jako komprimační knihovna zlib), tj. kombinaci slovníkového algoritmu LZ77 a Huffmanova kódování

Prokládání

Ukázka prokládání Adam7 na obrázku o rozměrech 16×16 pixelů

PNG nabízí volitelné prokládání pomocí dvourozměrného sedmiprůchodového algoritmu Adam7. Jedná se o pokročilejší prokládání než jednorozměrné čtyřprůchodové prokládání u formátu GIF – umožňuje lepší zobrazení obrázku v dřívější fázi přenosu souboru, obzvlášť při použití interpolace, např. bikubické interpolace.[6]

Sedmiprůchodový algoritmus však obvykle zhoršuje kompresní poměr víc než jednodušší algoritmy.

Porovnání s jinými formáty

GIF

JPEG

Porovnání JPEG a PNG: všimněte si roztřepených okrajů v JPEG oproti čistým okrajům PNG.

JPEG může vytvářet menší soubory než PNG pro fotografie a fotorealistické vizualizace, protože JPEG používá ztrátovou kompresi speciálně navrženou pro fotografii. PNG má ve stejné kvalitě až 5-10× větší soubory.

PNG je naopak lepší než JPEG pro obrázky obsahující text, čárovou grafiku, čisté barevné plochy a ostré rozhraní barev. JPEG nepodporuje průhlednost (indexové barvy, alfa kanál). Tam, kde se vyskytují jak fotografické, tak grafické prvky, je potřeba se rozhodnout mezi čistým zobrazováním bezeztrátového PNG, nebo malým souborem ztrátového JPEG.

JPEG je také špatným rozhodnutím pro archivování obrázků pro další zpracování a fotomontáž. To dělá PNG vhodnějším pro ukládání dočasných fotografií vyžadujících fotomontáž. Teprve finální fotografie určená k distribuci může být uložena jako JPEG se ztrátou detailů pouze pro jednu generaci.

PNG i JPEG umožňují ukládání metadat ve formátu Exif.

Reference

  1. libpng Home Page [online]. Rev. 2019-04-21 [cit. 2021-03-16]. Dostupné online. (anglicky) 
  2. RANDERS-PEHRSON, Glenn. Paleo PNGs [online]. 1995-03-07, rev. 1995-03-25 [cit. 2021-03-17]. Dostupné v archivu pořízeném dne 1999-01-16. (anglicky) 
  3. News and History of the PNG Development Group from 2017 [online]. PNG Development Group, 2017-07-13 [cit. 2018-01-23]. Dostupné online. (anglicky) 
  4. TIŠNOVSKÝ, Pavel. Anatomie grafického formátu PNG. Root.cz [online]. Internet Info, 2006-09-07 [cit. 2018-06-27]. Dostupné online. ISSN 1212-8309. 
  5. Portable Network Graphics (PNG) Specification (Second Edition) [online]. W3C, 2003-11-10 [cit. 2021-03-17]. Dostupné online. (anglicky) 
  6. Introduction to PNG [online]. [cit. 2017-08-15]. Dostupné online. (anglicky) 

Externí odkazy