Portable Network Graphics: Porovnání verzí

Smazaný obsah Přidaný obsah
m →‎Portable Network Graphics: -zbytečné podrobnosti o formátu GIF
značky: editace z mobilu editace z mobilní aplikace editace z mobilní aplikace pro Android
→‎Technické detaily: rozšíření
Řádek 62:
{|class=wikitable
!style="text-align:left"|Byte
!style="text-align:left"|Význam bytubajtu
|-
|89
Řádek 81:
 
=== Chunky ===
Každý chunk zprostředkovává jistou informaci o obrazu nebo metadatech. Chunky deklarujíjsou sebesémanticky jakosamostatné „rozhodující“(přímo nebose „pomocné“nepojí s jinými částmi souboru). StrukturaChunky chunkuse jerozdělují zvolenana tak,„rozhodující“ aby(critical) dovolovalaa „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 bytybajty), typu/názvu (4 bytybajty), samotných dat a [[Cyklický redundantní součet|kontrolního součtu]] (4 bytybajty). Díky tomuto návrhu mohou dekodéry formátu přeskakovat nekritické chunky, aniž by je musely číst; kontrolní součet přispívá k detekci chyb při čtení.
 
==== Typy chunků ====
Typ je popsán čtyřmi znaky v [[ASCII]] s(název vlastnostíchunku sestává vždy z písmen) s [[Case sensitivity|casecitlivostí sensitivena velká/malá]]. RozdílnostPoužití znakůvelkého nebo malého písmena (pátý bit znakuv kódu ASCII) poskytujev možnostsobě dešifrovatnese 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.
Řádek 94:
 
===== Rozhodující chunky =====
* <code>IHDR</code> představujeje hlavičkuhlavička obrazu (nikoliv hlavičku souboru – ta byla popsána výše). Obsahuje (v tomto pořadí) šířku obrazu v pixelech (4 bytybajty), výšku obrazu v pixelech (4 bytybajty), bitovoubarevnou hloubku (1 bytebajt), typ kódování barev (1 bytebajt), metodu komprese (1 bytebajt), metodu filtrování (1 bytebajt) a metodu prokládání (1 bytebajt) – celkem tedy 13 datových bytů. Musí být prvním chunkem.<ref>{{Citace elektronického periodika
| příjmení = Tišnovský
| jméno = Pavel
Řádek 106:
| datum přístupu = 2018-06-27
}}</ref>
** Pro výšku a šířku je platných prvních 31 bitů, 32. bit je ignorován. Hodnota 0 je neplatná.
* <code>PLTE</code> obsahuje [[Barevná paleta|paletu]] neboli seznam barev. Je povinný, pokud typ kódování barev (určený v <tt>IHDR</tt>) je paleta. Počet barev je mezi 1 a 256. Každá barva je uložená v [[RGB]] a zabírá 3 byty.
** Barevná hloubka obsahuje počet bitů na „vzorek/složku“ (nikoli pixel, s výjimkou, kdy jeden 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ý (jinak je monochromatický); bit 2 indikuje alfa kanál (mapu (polo)průhlednosti).
** Metoda komprese je pouze v dané verzi jedna (hodnota 0) pro 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é verzi existují jen adaptivní metody pěti filtrů: žádný, odečíst, „nahoru“, průměr, Paethova funkce.
* <code>PLTE</code> obsahuje [[Barevná paleta|paletu]] – tabulku barev. V obrázku využívající paletu se do obrazových bodů neukládají samotné barvy, ale barevné indexy – s tím, že koncovou barvu každého atributu definuje právě paleta. Tento chunk je povinný, pokud typ kódování barev (určený v <tt>IHDR</tt>) je 3, a volitelný, má-li typ kódování barev hodnotu 0 nebo 4. 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í. Chunk <tt>PLTE</tt>, je-li definován, musí být uveden před prvním chunkem <tt>IDAT</tt>. Může být uveden i pro truecolorové obrázky, coby doporučená paleta pro jeho konverzi do 256 barev.
* <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ý.
Řádek 127 ⟶ 132:
* <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 <tt>tEXt</tt>, ale text je komprimovaný.
 
===== Pořadí chunků =====
Existuje několik pravidel pro pořadí chunků.
* <tt>IHDR</tt> musí být první
* <tt>cHRM</tt>, <tt>gAMA</tt> a <tt>sBIT</tt> musí být před <tt>PLTE</tt> nebo (není-li) před <tt>IDAT</tt>
* <tt>PLTE</tt> a <tt>pHYs</tt> musí být před <tt>IDAT</tt>
* <tt>bKGD</tt>, <tt>hIST</tt> a <tt>tRNS</tt> musí být po <tt>PLTE</tt> (je-li), ale před <tt>IDAT</tt>
* <tt>tIME</tt>, <tt>tEXt</tt>, <tt>zTXt</tt>, <tt>iTXT</tt> a <tt>eXIF</tt> nemají pravidla pořadí, jen nesmí být mezi více <tt>IDAT</tt>
* <tt>IDAT</tt> (je-li jich více) musí být všechny za sebou
* <tt>IEND</tt> musí být poslední
 
===== Textová metadata =====
Chunky <code>tEXt</code>, <code>iTXt</code> a <code>zTXt</code> obsahují dvojice položka:hodnota pro textová metadata k obrázku. Předdefinovány jsou tyto položky:
* <code>Title</code> – krátký popisek nebo titulek k obrázku (na jednu řádku)
* <code>Author</code> – jméno tvůrce obrázku
* <code>Description</code> – popis obrázku (dlouhý)
* <code>Copyright</code> – poznámka o autorských právech
* <code>Creation Time</code> – čas vytvoření původního obrázku
* <code>Software</code> – software, který obrázek vytvořil
* <code>Disclaimer</code> – právní doložka
* <code>Warning</code> – varování o povaze obsahu
* <code>Source</code> – zařízení použité k vytvoření obrázku
* <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ího 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 ===