Portable Network Graphics: Porovnání verzí

Přidáno 1 242 bajtů ,  před 6 měsíci
Historie a vývoj: +odstavec o nejstarších vytvořených souborech PNG; oprava pořadí chunků; oprava názvů 2 chunků; nahrazení zastaralé HTML značky "tt"; Externí odkazy: +Specifkace PNG
(→‎top: infobox: +typ, -zastaralé formátování; úvod: +odstavec o referenční implementaci)
(Historie a vývoj: +odstavec o nejstarších vytvořených souborech PNG; oprava pořadí chunků; oprava názvů 2 chunků; nahrazení zastaralé HTML značky "tt"; Externí odkazy: +Specifkace PNG)
| přípona = .png
| mime = image/png
| type code = <code>PNGf</code><br /><code>PNG </code>
| uti = public.png
| magic = 89 50 4e 47 0d 0a 1a 0a
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řezen|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é<ref>{{Citace elektronické monografie
| příjmení = Randers-Pehrson
| jméno = Glenn
| titul = Paleo PNGs
| url = http://www.rpi.edu/~randeg/paleo_pngs.html
| url archivu = https://web.archive.org/web/19990116221327/http://www.rpi.edu/~randeg/paleo_pngs.html
| datum vydání = 1995-03-07
| datum aktualizace = 1995-03-25
| datum archivace = 1999-01-16
| datum přístupu = 2021-03-17
| nedostupné = ano
| jazyk = anglicky
}}</ref> a dostupné na [http://78.108.103.11/MIRROR/png_ftp/png/images/png zrcadle].
 
Chronologie zveřejňování standardu:
* [[1. říjen|1. října]] [[1996]] – byla uvolněna verze 1.0 se standardem [[RFC]] a [[World Wide Web Consortium|W3C]].
* [[31. prosinec|31. prosince]] [[1998]] – verze 1.1, s malým počtem změn a přidáním tří nových chunků.
 
==== Typy chunků ====
Typ je popsán čtyřmi znaky v [[ASCII]] (název chunku sestává vždy z písmen) s [[Case sensitivity|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.
 
* 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.
** Metoda komprese je v současné specifikaci jen jedna. Má hodnotu 0, což znamená kompresi LZW 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.
* <code>PLTE</code> obsahuje [[Barevná paleta|paletu]] – tabulku barev. Tento chunk je povinný, pokud typ kódování barev (určený v <ttcode>IHDR</ttcode>) 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á v [[RGB]] a 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ě. Chunk <ttcode>PLTE</ttcode>, je-li definován, musí být uveden před prvním chunkem <ttcode>IDAT</ttcode>.
* <code>IDAT</code> 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í.
* <code>IEND</code> označuje konec souboru a musí být posledním chunkem. Neobsahuje datovou část, proto je v každém souboru PNG stejný.
* <code>eXIf</code> obsahuje metadata ve formátu [[Exif]].
* <code>gAMA</code> obsahuje gama korekci.
* <code>hIST</code> představuje histogram neboli celkový (nebo i proporcionální) počet výskytů každé barvy z <ttcode>PLTE</ttcode> v obrazu. Může usnadnit volbu barev na zařízení, které nedokáže zobrazit všechny požadované barvy.
* <code>iCCP</code> je [[Barevný profil|barevný profil ICC]].
* <code>iTXt</code> obsahuje text s podporou [[UTF-8]], včetně anglického názvu, jazyka a názvu. Může být komprimovaný.
* <code>tIME</code> obsahuje datum a čas poslední úpravy obrazu.
* <code>tRNS</code> určuje průhlednost. U obrazů s paletou obsahuje hodnoty průhlednosti jedné nebo více barev z palety. U obrazů v [[Barevná hloubka#Používané barevné hloubky|pravých barvách]] a 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ý).
* <code>zTXt</code> je podobný jako <ttcode>tEXt</ttcode>, ale text je komprimovaný.
 
===== Pořadí chunků =====
Existuje několik pravidel pro pořadí chunků:<ref>{{Citace elektronické monografie | titul = Portable Network Graphics (PNG) Specification (Second Edition) | url = https://www.w3.org/TR/PNG/#5ChunkOrdering | datum vydání = 2003-11-10 | datum přístupu = 2021-03-17 | vydavatel = W3C | jazyk = anglicky}}</ref>
Existuje několik pravidel pro pořadí chunků.
* <ttcode>IHDR</ttcode> musí být první
* <ttcode>cHRMPLTE</ttcode>, <ttcode>gAMApHYs</ttcode> a <ttcode>sBITsPLT</ttcode> musí být před <tt>PLTE</tt> (je-li) nebo před <ttcode>IDAT</ttcode>
* <ttcode>PLTEcHRM</ttcode>, <code>gAMA</code>, <code>iCCP</code>, <code>sBIT</code> a <ttcode>pHYssRGB</ttcode> musí být před <ttcode>PLTE</code> (je-li) a před <code>IDAT</ttcode>
* <ttcode>bKGD</ttcode>, <ttcode>hIST</ttcode> a <ttcode>tRNS</ttcode> musí být po <ttcode>PLTE</ttcode> (je-li), ale před <ttcode>IDAT</ttcode>
* <ttcode>tIME</ttcode>, <ttcode>tEXt</ttcode>, <ttcode>zTXt</ttcode>, <ttcode>iTXTiTXt</ttcode> a <ttcode>eXIFeXIf</ttcode> nemají zvláštní pravidla (stačí dodržet pravidla ostatních chunků)
* <ttcode>IDAT</ttcode> musí být všechny těsně za sebou (pokud je víc než jeden)
* <ttcode>IEND</ttcode> musí být poslední
 
===== Textová metadata =====
* <code>Comment</code> – 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 ===
== Externí odkazy ==
* {{Commonscat}}
* [httphttps://www.rootw3.czorg/clankyTR/png-is-not-gifPNG/ Porovnání formátůSpecifikace PNG a GIF] článek na webu [[Root.czWorld Wide Web Consortium|W3C]]
* [httphttps://www.root.cz/clanky/anatomiepng-grafickehois-formatunot-pnggif/ AnatomiePorovnání grafického formátuformátů PNG a GIF] článek na [[Root.cz]]
* [https://www.root.cz/clanky/anatomie-grafickeho-formatu-png/ Anatomie grafického formátu PNG] – článek na Root.cz
* [http://advsys.net/ken/utils.htm PNGOUT] Malý freeware program pro maximální kompresi PNG