Format PNG (Portable Network Graphics)

LASTNOSTI FORMATA

Datotečni slikovni format PNG (angl. Portable Network Graphisc), se je začel razvijati leta 1995, kot zamenjava starejšega GIF formata, kateri ni več podpiral patentiranega kompresijskega algoritma. Format je bil ustvarjen pri W3C. [povzeto po 1 in 2]

PNG je bil zasnovan za hitro prenašanje slik na splet ter za prikaz slik na računalniških zaslonih. Zato uporablja samo barvni model RGB. PNG slike so 24 bitne, kar pomeni, da omogočajo 16,7M barv. [povzeto po 1]

PNG format omogoča prepletanje ter alfa kanal za transparentnost. Prepletanje je namenjeno postopnemu izboljševanju slike med nalaganjem. Alfa transparentnost pa omogoča prosojnost ozadja (primer: spodnja slika). Poleg tega pa PNG format omogoča tudi gama korelacijo, katera dovoljuje nadzor svetlosti slike, ki se prikaže na zaslonu. [povzeto po 1]

Format PNG pa ima tudi nekaj slabosti [povzeto po 1 in  2]:

  • ne podpira animacij
  • ne podpira CMYK barvnega modela

 

PRIMERNOST UPORABE

Format PNG je zaradi svoje transparentnosti zelo primeren za uporabo na spletu, poleg tega pa je primeren za slike, ki vsebujejo velike površine iste barve. Slike shranjene v formatu PNG pa so odlične tudi za izdelavo logotipov, predvsem tistih ki vsebujejo tudi besedilo. Format je precej uporaben tudi za zajeme zaslona. [povzeto po 3]

 

NAČIN KODIRANJA

PNG kompresija je ena izmed boljših kompresij  z brezplačnim patentom ter brez izgube podatkov.

PNG uporablja dvostopenjski postopek

  • predkompresija oz. filtriranje
  • kompresija (algoritem DEFLATE)

Sliko najprej pripravimo na optimalno stiskanje s pomočjo filtriranja. Pri vsaki vrstici precejalni posotpek napove barvo tekoče točke na podlagi prejšnjih točk. Nato se napovedana barva odšteje od dejanske barve tekoče točke.

Slika prikazuje postopek filtriranja. Ta lahko vrednost X napove na osnovi A, B in C. Vsaka slikovna pika je torej zapisana na podlagi točke na levi strani ter točk nad njo.

Po filtriranju sliko stisnemo. Za stiskanje PNG uporablja nepatentiran brezizgubni postopek stiskanja podatkov DEFLATE (isti postopek uporabljajo tudi programi ZIP, Unzip). Algoritem deluje tako, da podatke razdeli na bloke, kjer se vsak blok pretvori v niz s pomočjo algoritma LZ77. Dobljeni niz nato kodiramo s pomočjo Huffmanovega kodiranja.

[Načini kodiranja povzeti po 4]

DEFLATE ALGORITEM

Algoritem tvori kodirano zaporedje, ki je sestavljeno iz blokov poljubne dolžine. Pri kodiranju uporablja algoritme RLE, LZ77 ter Huffmanovo kodiranje.

Algoritem poišče ponavljajoče se nize v vhodnih podatkih. Druga ponovitev niza je zamenjana s kazalcem na prejšnji niz. Kazalec je sestavljen iz para števil – razdalja (predstavlja kako deleč nazaj se je zaporedje začelo) in dolžina (predstavlja dolžino znakov v nizu). Razdalja je omejena s 32K bajti, dolžina pa s 258 bajti. Simbole, ki jih ne najdemo v slovarju oziroma je njihova dolžina ujemanja manjša od treh znakov, zapišemo kot literale direktno v izhodni niz.

Sledi gradnja Huffmanovega drevesa. Pri gradnji drevesa, ne moremo vplivati, kje v drevesu se bo posamezni simbol pojavil. Algoritem Deflate zahteva, da so kode urejene po dolžini, kode enakih dolžin pa po simbolih, ki jih predstavljajo.

[Celoten Deflate algoritem povzet po 5]

 

Še kratek opis algoritmov RLE, LZ77, Huffmanovo kodiranje.

Algoritem RLE – kadar se nek znak vhodnega zaporedja ponovi n-krat, v izhodno zaporedje zapišemo dvojček (število ponovitev, znak)

Algoritem LZ77 – vhodni niz znakov razdelimo na dva dela. Leva stran je slovar (vsebuje znake, ki smo jih že kodirali), desna stran pa predstavlja zaporedje znakov, ki jih moramo še obdelati. Znake jemljemo po vrsti iz leve proti desni strani in iz njih tvorimo besedo.

Huffmanovo kodiranje – najprej pregledamo vhodno zaporedje in ugotovimo kolikokrat se posamezni simbol pojavlja. Nato tabelo simbolov glede na število ponavljanj uredimo v padajočem vrstnem redu.

[Opisi algoritmov povzeti po 5]

 

Več o algoritmih si lahko preberete na spodnjih povezavah: