PNG (formatas)
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
[redaguoti | redaguoti vikitekstą]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
[redaguoti | redaguoti vikitekstą]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
[redaguoti | redaguoti vikitekstą]Š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
[redaguoti | redaguoti vikitekstą]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) |
41 | 00 | sRGB turinys |
42-45 | AE CE 1C E9 | (CRC) |
46-49 | 00 00 02 38 | (32 bitų sk.) 568 (IDAT ilgis) |
50-53 | 49 44 41 54 | (ANSI) IDAT |
54-621 | (daug simbolių) | suspaustas paveikslėlis |
622-625 | CE F5 7B 90 | (CRC) |
626-629 | 00 00 00 00 | (32 bitų sk.) 0 (IEND ilgis) |
630-363 | 49 45 4E 44 | (ANSI) IEND |
634-637 | AE 42 60 82 | (CRC) |