A PNG (Portable Network Graphics) képek tárolására, veszteségmentes tömörítésére alkalmas fájlformátum. Kiterjesztésként a .png írásmóddal használják.

Jellemzése A PNG egy 1996-ban kiadott fájlformátum, a GIF utódaként emlegetik. Kifejlesztésének oka volt, hogy a GIF formátumnál használt LZW tömörítési algoritmus jogi oltalom alá eső eljárásokat tartalmazott, vagyis a GIF tömörítés üzleti használatához jogdíj megfizetése volt kötelező. A PNG elsődlegesen a deflate nevű algoritmust használja (az LZ77 egy módosított változatát, a zlib programkönyvtár segítségével).

A PNG egy veszteségmentes tömörítési eljárás. Ez azt jelenti, hogy ha adott egy tömörítetlen kép, melyet PNG formátumba tömörítünk (ezzel a fájl méretét csökkentve), majd az eredményt kicsomagoljuk, és az eredeti képpel együtt kinagyítjuk, akkor képpontról képpontra haladva az összehasonlítás azt mutatja, hogy az eredeti kép és a tömörítésen átesett kép tökéletesen megegyezik, tehát semmilyen információ nem veszett el vagy torzult el a tömörítés során. Hasonlóképpen veszteségmentes tömörítést végez az összes olyan eljárás is, amely például programfájlok méretének csökkentésére használatos, így a (Pk)ZIP, ARJ, RAR, 7Z formátumú tömörítés is. Veszteséges tömörítést alkalmaznak például a JPG, MP3, MP4 és más multimédiás formátumok.

Veszteségmentes tömörítést érdemes alkalmazni azoknál a képeknél, amelyeknek a fotófeldolgozását, retusálását később akarjuk elvégezni, illetve egy pixelnyi torzulást sem tartunk megengedhetőnek. A tömörítés a képben levő sok pontosan azonos színű pixel jelenlétét használja ki, azok helyett egy „rövidítést” alkalmaz, így a képfájl mérete jelentősen csökkenthető lehet. Jellegzetesen ideális a PNG tömörítés számítógéppel előállított (és nem beszkennelt) szöveges ábrák, diagramok, vonalas rajzok, pontosan egyszínű mezőket, foltokat tartalmazó képek tömörítésére. A JPG formátum ezekben szemmel látható, jellegzetes torzulásokat, hamis kontúrokat, elmosódott vonalakat, „szellemképeket” eredményez, vagyis az alkalmazása ilyen esetben nem szerencsés. A PNG olyan kép esetében, amelyben igen sokféle szín van (például részletgazdag, árnyalt fényképek vagy beszkennelt könyvlapok), a túl nagy változatosság nem tud jelentős eredményt, méretcsökkenést elérni, bár valamennyit akkor is. Ilyen képek esetében a JPG tömörítés az alkalmasabb, mert szemmel észre nem vehető változtatásokkal (eltérő tömörítési algoritmusával) optimalizálva a képet jelentős méretcsökkenést képes létrehozni, némi adatvesztés árán, amely csak kinagyítva felfedezhető.

Előnyei A PNG számos előnnyel rendelkezik a GIF-hez képest: alfa csatornákkal, ami a fokozatosan átlátszó képeket teszi lehetővé, gamma korrekcióval, ami a képek fényességét (elméletben) függetleníteni tudja a megjelenítéstől (tehát a színek ugyanúgy néznek ki nyomtatásban, és eltérő képességű kijelzőkön), kétdimenziós fokozatos kijelzés (lásd lentebb), támogat indexelt, szürkeskálás (16 bitig) és true color (48 bitig) formátumot, hasonló, vagy jobb tömörítés.

A PNG a GIF-fel szemben nem támogatja a több képet tartalmazó állományokat (erre az MNG való, a PNG-hez hasonló formátum).

Fokozatos megjelenítés A PNG egyik újdonsága a képek fokozatos megjelenítésének új módja (ennek neve Adam-7), ami lehetővé teszi, hogy lassú átvitel vagy nagy méretű kép esetén már a letöltés elején látni lehessen elnagyoltan (kis felbontásban) a kép tartalmát, ami a letöltés előrehaladtával fokozatosan nyeri el részletgazdagságát.

A GIF kétmenetes megjelenítése a kép egynyolcadának megérkezése után mutat először teljes, elnagyolt képet, és a következő fázist csak a teljes kép megérkezése után kapjuk meg. Az elnagyolt kép esetén a torzítás 8:1-hez, a képből csak „csíkok” látszanak.

A PNG ezzel szemben a kép 1/64-edének megérkeztekor már képes hozzávetőleges képet mutatni, ráadásul a képpontok nem torzítanak többet, mint 2:1, vagyis a durva kép egyenletesen tartalmazza a végleges képet.

jobbra|Képpontok fokozatos megjelenítése Az illusztráció mutatja a képpontok (pixel) megérkezésének sorrendjét: minden olyan pixel, ahova még nem érkezett adat általában a tőle balra és felfelé eső már ismert pixel színét kapja (de lehetséges a fraktál-tömörítéshez hasonlóan átmeneteket generálni az ismert pixelek színei között), így az első fázisban (harmadik kis kép) az egész kép "citromsárga", a negyedikben a bal fele "citrom", a jobb fele "narancs", az ötödikben a negyedek sorban: citrom, narancs, kék és másik kék, és így tovább. (A golyók színei nem a pixelek színét, hanem az "egyszerre (egy fázisban) érkező pixeleket" mutatják.)

Előfeldolgozott pixelek A PNG további újítása az, hogy minden képpont (pixel) elő-feldolgozott. Öt módszer van erre definiálva:

0. típus, (NONE), nincs sehogy módosítva, 1. típus, (SUB), az adott és a megelőző bal oldali képpont közti különbség tárolt, 2. típus, (UP), az adott és az előző felső soron lévő (tehát a jelenlegi felett lévő) képpont közti különbség tárolt, 3. típus, (AVERAGE), az adott képpont és annak jobb és baloldalt lévő szomszédjai közti különbség tárolt, 4. típus, (PAETH), az adott képpont és három szomszédja (bal, felső és bal felső) értékeinek a Paeth-algoritmussal (Alan W. Paeth javaslata) való feldolgozás után kapott érték tárolt.

True Color További fontos tulajdonsága és a GIF-fel szemben előnye, hogy true color módban lévő képeket is képes tárolni. Az elért tömörítési arány természetesen nem olyan kedvező, mint a JPEG esetében, viszont JPEG-gel szemben a PNG tömörítési eljárása veszteségmentes. A PNG emellett azon képformátumok közé tartozik, amelyek RGBA színskálájú képekre is használhatóak.

Animációk A PNG formátum önmagában nem támogatja animációk létrehozását. Ezért a PNG fejlesztőcsapat létrehozta az MNG formátumot. A MNG hasonló fájlstruktúrával rendelkezik, mint a PNG, de jóval összetettebb. Egy másik alternatíva a Mozilla Alapítvány által kifejlesztett APNG (Animated PNG). Ennek a formátumnak fontos előnye a szabványos PNG formátummal való visszafelé kompatibilitás. Az APNG formátumot nem támogató szoftverek is képesek megjeleníteni az animáció első képkockáját.

Technikai információk Minden szabványos PNG fájl egy 8 bájt hosszúságú fejléccel kezdődik. Az alábbi táblázat mutatja ennek a struktúráját:

Bájt(ok) –hexadecimális Jelentés 89 Egyebek mellett annak az elkerülésére szolgál, hogy egyszerű szöveges fájlok PNG fájlokként legyenek interpretálva, vagy fordítva. 50 4E 47 A "PNG" karakterlánc ASCII kódja, amely azt segíti elő, hogy a PNG fájl könnyen felismerhető legyen, akár egyszerű szövegszerkesztővel történő megnyitásnál is. 0D 0A DOS stílusú sorvége jel (CR+LF), a DOS/Windows jellegű sorvége kódolás detektálására. 1A Ez a karakter leállítja a fájl tartalmának listázását DOS rendszeren. 0A Unix fájlvége karakter, az Unix jellegű sorvége kódolás detektálására.

Chunk-ok a fájlban A PNG formátumban a képhez tartozó összes adat ún. chunk-okban található (angol szó, jelentése „darab”, ez esetben egyszerre feldolgozható adatszakasz). Minden egyes chunk a következő struktúra szerint épül fel:

Hossz Adat 4 bájt Chunk hossza 4 bájt Chunk típusa hossz bájt Adatok 4 bájt CRC

Az adatokat az ún. hálózati byte-sorrendben (big-endian) tárolják.

A legfontosabb chunk-ok Név Szerepe a fájlban IHDR Az első chunk a fájlban. Többek között olyan alapvető információkat tartalmaz, mint a kép szélessége és magassága. PLTE A felhasznált palettát tárolja. Használata nem kötelező, a true color képek nem használják. IDAT A képet magát tartalmazza, tömörített formában. IEND A fájlt lezáró chunk, az ez után található adat nem interpretálódik.

Kapcsolódó szócikkek képtömörítés GIF JPEG

További információk APNG specifikáció (angol) Animated PNG Creator - egy PHP osztály animált PNG fájlok készítésére

Források A. W. Paeth. Image File Compression Made Easy. In James Arvo ed.: Graphics Gems II. Academic Press, San Diego, 1991.

Kategória:Grafikus fájlformátumok