PNG (angl.Portable Network Graphics) – bitų masyvo formatas, kuris suglaudinamas „be nuostolių“. Sukurtas kaip GIF formato pakaitalas – formatas nereikalaujantis patento licencijos.
PNG palaiko paletėmis paremtus 24 bitų (RGB (angl.Red Green Blue (liet.Raudona Žalia Mėlyna) spalvų paletės), 32 bitų RGBA ir juodai baltus (angl.Greyscale) vaizdus. PNG buvo sukurtas paveikslėliams kelti į internetą,nepalaiko kitų spalvų erdvių (tokių kaip CMYK).
Formatas sukurtas, kai 1995 m. pradžioje paaiškėjo, kad LZW duomenų suglaudinimo algoritmas, naudotas GIF formate, buvo užpatentuotas kompanijos Unisys. Taip pat buvo ir kitų problemų susijusių su GIF formatu, kurios paskatino PNG kūrimą. Viena jų buvo 256 spalvų limitas, kada jau buvo paplitę kompiuteriai gebantys atvaizduoti žymiai daugiau nei 256 spalvas. Nors GIF palaiko animaciją, buvo nuspręsta, kad PNG turėtų būti „nejudantis“. Giminingas formatas MNG buvo sukurtas specialiai animacijai.
PNG naudoja nepatentuotą duomenų glaudinimo be nuostolių metodą žinomą kaip „deflate“ (zlib/gzlib).
Bylos struktūra
Kiekviena PNG byla prasideda tokiais pat baitais 0x84; 0x59; 0x4e; 0x47; 0x0d; 0x0a; 0x1a; 0x0a. Tokia bylos pradžia rašoma tam, kad atidarant netinkamu režimu skaitymas būtų nutraukiamas[1]. Po jų rašomi segmentai (angl.chunks) iš kurių yra sudaryta likusi byla. Kiekvienas segmentas prasideda 32 bitų sveiku skaičiumi, nurodančiu segmento ilgį simboliais (simbolis yra du baitai; neįskaitant ilgio ir pavadinimo baitų). Po to rašomas segmento pavadinimas, pavyzdžiui, "IDAT" arba "tRNS". Po to, anksčiau nurodytas simbolių skaičius, sudaro segmento turinį. Segmentą užbaigia 8 CRC baitai ir prasideda naujas segmentas. Byla užbaigiama "IEND" segmentu.
Svarbiausi segmentai
Be šių segmentų PNG negali veikti:
IHDR - Šiame segmente nurodomas paveiksliuko aukštis, plotis, spalvos tipas, filtro tipas ir panašiai
PLTE (jei nurodyta, kad naudojama paletė)
IDAT - Šiame segmente laikomas suspaustas paveikslėlis
IEND
Pagalbiniai segmentai
Šie segmentai nurodo papildomą informaciją:
bKGD
cHRM
gAMA
hIST
pHYs
sBIT
tEXt
tIME
tRNS
zTXt
Tokių segmentų gali būti ir daugiau. Atidarantys algoritmai dažniausiai būna tolerantiški ir nežinomus segmentus praleidžia
Paprasto failo pavyzdys
Simboliai
Šešioliktainė išraiška
Reikšmė
0-7
84 59 4E 47 0D 0A 1A 0A
(ANSI) ?PNG????
8-11
00 00 00 0D
(32 bitų sk.) 13 (IHDR dydis)
12-15
49 48 44 52
(ANSI) IHDR
16-23
00 00 01 00 00 00 01 00
(32 bitų sk.) 256 256
24
08
8 bitai (simbolis) vienam taškui kiekviename kanale
25
06
Spalvų tipas - 6 (RGBA)
26
00
Įprastas suspaudimas
27
00
Jokio filtro
28
00
Be „pynimo“
29-32
5C 72 A8 66
(CRC)
33-36
00 00 00 01
(32 bitų sk.) 1
37-40
73 52 47 42
(ANSI) sRGB (neaiškus segmentas; tikriausiai specifinis GIMP programai)