Portable Network Graphics
Přípona souboru | .png |
---|---|
Typ internetového média | image/png |
Type code | PNGf PNG |
Uniform Type Identifier | public.png |
Magické číslo | 89 50 4e 47 0d 0a 1a 0a |
Tvůrce | PNG Development Group |
První verze | 1. října1996 |
Typ formátu | rastrová grafika |
Rozšíření | APNG,JNGaMNG |
Standard(y) | ISO 15948, IETFRFC 2083 |
Otevřený formát | ano |
Website | libpng.org/pub/png |
PNG(oficiální výslovnost „ping “,Portable Network Graphics,českypřenosná síťová grafika) jerastrovýgrafický formátsbezeztrátovoukompresí. Byl vyvinut jako zdokonalení a náhrada formátuGIF.PNG nabízí podporu 24bitové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 (algoritmusDeflate+ 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.RGBAbarevný model). Nevýhodou PNG oproti GIF je praktická nedostupnost jednoduchéanimace,pro kterou sice existují 2 návrhyAPNGaMNG,které se ale zatím neprosadily.
PNG se stejně jako formátyGIFaJPEGpoužívá naInternetu.
PodleMIMEmá PNG přidělen typimage/png
.
Oficiálníreferenční implementacíformátu jelibpng.[1]
Historie a vývoj
[editovat|editovat zdroj]Impuls pro vytvoření formátu PNG přišel v roce1994,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. ledna1995firma 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řezna1995 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é nazrcadle.
Chronologie zveřejňování standardu:
- 1. října1996– byla uvolněna verze 1.0 se standardemRFCaW3C.
- 31. prosince1998– verze 1.1, s malým počtem změn a přidáním tří nových chunků.
- 11. srpna1999– verze 1.2, přidání jednoho speciálního chunku.
- 10. listopadu2003– Z PNG se stává mezinárodní norma (ISO/IEC15948:2003). Tato verze PNG je mírně odlišná od verze 1.2, ale není zde žádný nový chunk.
- 3. března2004–ISO/IEC 15948:2004.
- 13. července2017– schválena podpora proExif[3]
Technické detaily
[editovat|editovat zdroj]Soubor PNG se skládá z hlavičky souboru a série chunků (datových bloků, doslovakusů,soustnebošpalků).
Hlavička souboru
[editovat|editovat zdroj]Hlavička souboru (nikoliv hlavička obrazu – ta bude popsána níže) neboli magické číslo v PNG má délku 8bytůa je v každém souboru stejná.Hexadecimálněmá podobu89 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ý vASCII;slouží k identifikaci souborového formátu |
0D 0A | (CR LF)konec řádkyvDOSukódovaný vASCII;detekce náhrady za jinou sekvenci |
1A | byte zastavující výpis souboru vDOSu |
0A | vUNIXudetekce konce přenosu (LF) |
Chunky
[editovat|editovat zdroj]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 akontrolní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ů
[editovat|editovat zdroj]Typ je popsán čtyřmi znaky vASCII(název chunku sestává vždy z písmen) srozliš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.
- První znak signalizuje, zda je chunk rozhodující: velké písmeno znamená rozhodující chunk, malé pak pomocný. Rozhodující chunk obsahuje informaci, která je nezbytná k načtení obrazu. Naopak jakýkoliv pomocný chunk, kterému dekodér nerozumí, může bezpečně ignorovat.
- Druhý znak informuje, zda je chunk „veřejný “(jedná se o jednoúčelový chunk) nebo „privátní “(není standardizován). Velké písmeno značí veřejný a malé privátní chunk. To zajistí, že veřejný a privátní znak chunku se nemohou nikdy vzájemně střetnout.
- Třetí znak musí podle specifikace PNG být velké písmeno. Je rezervovaný pro budoucí rozšíření. V případě malého písmene by měl dekodér jednat s tímto chunkem jako s jakýmkoliv jiným neznámým.
- Čtvrtý znak signalizuje, jestli je chunk bezpečný ke kopírování pomocí editorů, které ho nerozeznají. Je-li čtvrtý znak malé písmeno, chunk může být bezpečně kopírován bez ohledu na rozsah modifikací souboru. Je-li čtvrtý znak velké písmeno, může být kopírován, jen pokud se modifikace nedotýkají žádných rozhodujících chunků.
Rozhodující chunky
[editovat|editovat zdroj]IHDR
je hlavička obrazu (nikoliv hlavičku souboru – ta byla popsána výše). Obsahuje (v tomto pořadí) šířku obrazu v pixelech (4 bajty), výšku obrazu v pixelech (4 bajty), barevnou hloubku (1 bajt), typ kódování barev (1 bajt), metodu komprese (1 bajt), metodu filtrování (1 bajt) a metodu prokládání (1 bajt) – celkem tedy 13 datových bytů. Musí být prvním chunkem.[4]- Pro výšku a šířku je platných prvních 31 bitů, 32. bit je ignorován. Hodnota 0 je neplatná.
- Barevná hloubka obsahuje počet bitů na „vzorek/složku “(nikoli pixel). Možné hodnoty jsou 1, 2, 4, 8 a 16.
- Typ kódování barev je složen ze tří bitů: bit 0 indikuje, zda je použita paleta; bit 1 říká, je-li obraz barevný; bit 2 indikuje přítomnost alfa kanálu.
- Metoda komprese je v současné specifikaci jen jedna. Má hodnotu 0, což znamená kompresi DEFLATE s 32KiB „plovoucím “oknem.
- Metoda filtrování určuje předzpracování obrazových dat (pixelů nebo surových bajtů) před kompresí. V současné specifikaci je jen jedna metoda, má hodnotu 0. V rámci ní existuje 5 typů filtrů: žádný, rozdíl vůči levému, rozdíl vůči hornímu, rozdíl vůči průměru levého a horního, Paethova funkce.
PLTE
obsahujepaletu– tabulku barev. Tento chunk je povinný, pokud typ kódování barev (určený vIHDR
) je 3, a volitelný v případě typu kódování barev 2 nebo 6. Počet barev je mezi 1 a 256. Každá barva je uložená vRGBa zabírá 3 bajty – každý bajt v plném rozsahu (0 až 255) pro červenou, zelenou a modrou složku v tomto pořadí. V obrázku s paletou se jako pixely neukládají samotné barvy, ale právě indexy v paletě. ChunkPLTE
,je-li definován, musí být uveden před prvním chunkemIDAT
.IDAT
obsahuje samotná obrazová data jakožto výstup komprese. Data mohou být rozdělena do více chunků tohoto typu, což mírně zvětšuje soubor, ale umožňuje streamování.IEND
označuje konec souboru a musí být posledním chunkem. Neobsahuje datovou část, proto je v každém souboru PNG stejný.
Pomocné chunky
[editovat|editovat zdroj]bKGD
určuje výchozí barvu pozadí. Ta se má použít, pokud není jiná vhodnější volba, např. v prohlížečích obrázků (ale ne ve webových prohlížečích).cHRM
nese informaci o chromatičnosti.eXIf
obsahuje metadata ve formátuExif.gAMA
obsahuje gama korekci.hIST
představuje histogram neboli celkový (nebo i proporcionální) počet výskytů každé barvy zPLTE
v obrazu. Může usnadnit volbu barev na zařízení, které nedokáže zobrazit všechny požadované barvy.iCCP
jebarevný profil ICC.iTXt
obsahuje text s podporouUTF-8,včetně anglického názvu, jazyka a názvu. Může být komprimovaný.pHYs
určuje zamýšlenou fyzickou velikost pixelu a/nebo poměr horizontální a vertikální velikosti pixelu.sBIT
vyjadřuje přesnost barev zdrojových dat.sPLT
navrhuje paletu, pokud zařízení neumí zobrazit všechny barvy použité v obrazu.sRGB
znamená, že je použitý barevný prostorsRGB.sTER
je indikátor prostorového obrazu.tEXt
obsahuje text ve znakové saděISO 8859-1,včetně názvu tohoto textu.tIME
obsahuje datum a čas poslední úpravy obrazu.tRNS
určuje průhlednost. U obrazů s paletou obsahuje hodnoty průhlednosti jedné nebo více barev z palety. U obrazů vpravých barvácha ve stupních šedi určuje jedinou barvu, která je zcela průhledná (ovšem u variant s alfa kanálem je tento chunk zakázaný).zTXt
je podobný jakotEXt
,ale text je komprimovaný.
Pořadí chunků
[editovat|editovat zdroj]Existuje několik pravidel pro pořadí chunků:[5]
IHDR
musí být prvníPLTE
,pHYs
asPLT
musí být předIDAT
cHRM
,gAMA
,iCCP
,sBIT
asRGB
musí být předPLTE
(je-li) a předIDAT
bKGD
,hIST
atRNS
musí být poPLTE
(je-li), ale předIDAT
tIME
,tEXt
,zTXt
,iTXt
aeXIf
nemají zvláštní pravidla (stačí dodržet pravidla ostatních chunků)IDAT
musí být všechny těsně za sebou (pokud je víc než jeden)IEND
musí být poslední
Textová metadata
[editovat|editovat zdroj]ChunkytEXt
,iTXt
azTXt
obsahují dvojice položka:hodnota pro textová metadata k obrázku. Předdefinovány jsou tyto položky:
Title
– krátký popisek nebo titulek k obrázku (na jednu řádku)Author
– jméno tvůrce obrázkuDescription
– popis obrázku (dlouhý)Copyright
– poznámka o autorských právechCreation Time
– čas vytvoření původního obrázkuSoftware
– software, který obrázek vytvořilDisclaimer
– právní doložkaWarning
– varování o povaze obsahuSource
– zařízení použité k vytvoření obrázkuComment
– povšechný komentář (do kterého nespadají položky výše); převod z formátu GIF
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
[editovat|editovat zdroj]PNG používábezeztrátovou kompresise 2 základními kroky:
- Filtrování – snaha objevit běžné vzory (např. barevné pruhy, gradienty) pro zvýšení účinnosti dalšího kroku
- Komprese – využívá metoduDEFLATE(stejně jako komprimační knihovnazlib), tj. kombinaci slovníkového algoritmuLZ77aHuffmanova kódování
Prokládání
[editovat|editovat zdroj]PNG nabízí volitelnéprokládánípomocí dvourozměrného sedmiprůchodového algoritmuAdam7.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
[editovat|editovat zdroj]GIF
[editovat|editovat zdroj]- GIFpodporuje nejvýš 8bitovou barevnou paletu (maximálně 256 barev). PNG podporuje i 24 bitů na pixel (8 bitů na kanál) a 48 bitů na pixel (16 bitů na kanál), což umožňuje lepší podání barev, jemnější barevné přechody atd. S přidaným alfa kanálem je k dispozici až 64 bitů na pixel.
- PNG nabízí širší možnosti průhlednosti než GIF, včetně alfa kanálu.
- Ve většině případů PNG dosahuje lepšího kompresního poměru než GIF. Jen u některých malých obrázků to je naopak.
- GIF podporuje jednoduché animace. PNG sám o sobě nikoliv (podporují je odvozené, málo rozšířené formáty APNG a MNG, které byly za tím účelem vytvořeny).
- Při konverzi z PNG na GIF dochází ke ztrátě kvality v případě, že PNG obsahuje víc než 256 barev (takové snížení barevné hloubky se obvykle projeví zmenšením souboru, což může vést k mylnému závěru, že GIF má lepší kompresi).
- Prokládání v PNG umožňuje dřívější rozpoznání obsahu stahovaného obrázku než prokládání v GIF.
- Oba formáty jsou podporované širokou softwarovou základnou.
JPEG
[editovat|editovat zdroj]JPEGmůž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átuExif.
Reference
[editovat|editovat zdroj]- ↑libpng Home Page[online]. Rev. 2019-04-21 [cit. 2021-03-16].Dostupné online.(anglicky)
- ↑RANDERS-PEHRSON, Glenn.Paleo PNGs[online]. 1995-03-07, rev. 1995-03-25 [cit. 2021-03-17].Dostupné v archivupořízeném dne 1999-01-16. (anglicky)
- ↑News and History of the PNG Development Group from 2017[online]. PNG Development Group, 2017-07-13 [cit. 2018-01-23].Dostupné online.(anglicky)
- ↑TIŠNOVSKÝ, Pavel. Anatomie grafického formátu PNG.Root.cz[online]. Internet Info, 2006-09-07 [cit. 2018-06-27].Dostupné online.ISSN1212-8309.
- ↑Portable Network Graphics (PNG) Specification (Second Edition)[online]. W3C, 2003-11-10 [cit. 2021-03-17].Dostupné online.(anglicky)
- ↑Introduction to PNG[online]. [cit. 2017-08-15].Dostupné online.(anglicky)
Externí odkazy
[editovat|editovat zdroj]- Obrázky, zvuky či videa k tématuPortable Network GraphicsnaWikimedia Commons
- Specifikace PNGna webuW3C
- Porovnání formátů PNG a GIF– článek naRoot.cz
- Anatomie grafického formátu PNG– článek na Root.cz
- PNGOUTMalý freeware program pro maximální kompresi PNG