Kompresja PNG

Bezstratna kompresja obraz贸w z obs艂ug膮 przezroczysto艣ci u偶ywaj膮ca algorytmu DEFLATE.

W Poszukiwaniu Lepszego Formatu Obrazu: Narodziny PNG

We wczesnych dniach sieci World Wide Web format GIF by艂 kr贸lem. Pozwala艂 na ma艂e rozmiary plik贸w dla prostych grafik u偶ywanych na stronach internetowych i da艂 艣wiatu rado艣膰 prostych animacji. Jednak GIF mia艂 dwie znacz膮ce wady, kt贸re sk艂oni艂y spo艂eczno艣膰 internetow膮 do poszukiwania lepszej alternatywy. Po pierwsze, by艂 ograniczony do palety zaledwie 256 kolor贸w, co czyni艂o go nieodpowiednim dla wysokiej jako艣ci obraz贸w fotograficznych. Po drugie, u偶ywany przez niego algorytm kompresji LZW by艂 opatentowany, a w艂a艣ciciel patentu zacz膮艂 domaga膰 si臋 op艂at licencyjnych, tworz膮c niepewno艣膰 prawn膮 dla tw贸rc贸w oprogramowania.

W odpowiedzi na to, grupa programist贸w stworzy艂a nowy, otwarty standard, zaprojektowany jako lepszy, wolny od patent贸w zamiennik dla GIF. Nazwali go PNG, co oficjalnie oznacza . PNG zosta艂 zaprojektowany od podstaw, aby by艂 wszechstronny, pot臋偶ny i, co najwa偶niejsze, ca艂kowicie bezstratny. Od tego czasu sta艂 si臋 najszerzej stosowanym formatem kompresji bezstratnej w Internecie, cenionym za zdolno艣膰 do obs艂ugi grafik z ostrymi kraw臋dziami, tekstem i przezroczysto艣ci膮 z doskona艂膮 wierno艣ci膮.

Serce PNG: Algorytm DEFLATE

W przeciwie艅stwie do JPEG, kt贸ry u偶ywa z艂o偶onego, wieloetapowego, stratnego potoku, moc kompresji PNG pochodzi z jednego, genialnego i ca艂kowicie algorytmu znanego jako DEFLATE. Algorytm DEFLATE to nie jedna technika, ale sprytne po艂膮czenie dw贸ch dobrze ugruntowanych metod kompresji stosowanych sekwencyjnie. Jest to ten sam podstawowy algorytm, kt贸ry jest u偶ywany w popularnych formatach archiwizacji plik贸w, takich jak ZIP i GZIP, co 艣wiadczy o jego wszechstronno艣ci i skuteczno艣ci.

Cz臋艣膰 1: LZ77 - Znajdowanie Powtarzaj膮cych si臋 Wzorc贸w

Pierwszy etap DEFLATE wykorzystuje , pot臋偶n膮 technik臋 kompresji opart膮 na s艂owniku. Dzia艂a on, szukaj膮c powtarzaj膮cych si臋 sekwencji danych w obrazie.

Wyobra藕 sobie algorytm czytaj膮cy dane pikseli twojego obrazu bajt po bajcie. Utrzymuje on "przesuwne okno" ostatnio widzianych danych, kt贸re dzia艂a jak dynamiczny s艂ownik. Czytaj膮c nowe dane, ci膮gle sprawdza sw贸j s艂ownik, aby zobaczy膰, czy obecna sekwencja bajt贸w pojawi艂a si臋 ju偶 wcze艣niej w oknie.

  • Je艣li sekwencja jest nowa, algorytm po prostu wyprowadza j膮 jako "litera艂" i dodaje do swojego s艂ownika.
  • Je艣li sekwencja by艂a ju偶 widziana, algorytm robi co艣 sprytnego. Zamiast wyprowadza膰 sekwencj臋 bajt贸w ponownie, wyprowadza znacznie kr贸tsze odwo艂anie, czyli wska藕nik. Taki wska藕nik zazwyczaj sk艂ada si臋 z dw贸ch liczb:
    1. Odleg艂o艣膰: Jak daleko wstecz w s艂owniku nale偶y spojrze膰, aby znale藕膰 pocz膮tek pasuj膮cej sekwencji.
    2. D艂ugo艣膰: Ile bajt贸w nale偶y skopiowa膰 z tego miejsca pocz膮tkowego.

Na przyk艂ad rozwa偶my zdanie: "W Szczebrzeszynie chrz膮szcz brzmi w trzcinie, co Szczebrzeszyn z tego s艂ynie." Algorytm LZ77 przetworzy艂by to nast臋puj膮co:

  1. Wyprowadzi艂by "W Szczebrzeszynie chrz膮szcz brzmi w trzcinie, co " jako litera艂y.
  2. Gdy dotrze do drugiego "Szczebrzeszyn", znajduje dopasowanie w swoim s艂owniku. Zamiast pisa膰 te 12 znak贸w ponownie, wyprowadza wska藕nik, np. (odleg艂o艣膰: 38, d艂ugo艣膰: 12), kt贸ry jest znacznie kr贸tszy.
  3. Nast臋pnie wyprowadza " z tego s艂ynie." jako litera艂y.

Ta technika jest niezwykle skuteczna w przypadku grafiki generowanej komputerowo, kt贸ra cz臋sto zawiera du偶e obszary identycznego koloru lub powtarzaj膮ce si臋 wzory.

Cz臋艣膰 2: Kodowanie Huffmana - Efektywne Kodowanie Wyniku

Wynikiem etapu LZ77 jest mieszanka litera艂贸w (dla nowych danych) i wska藕nik贸w odleg艂o艣膰/d艂ugo艣膰 (dla powtarzaj膮cych si臋 danych). Drugi etap DEFLATE bierze ten mieszany strumie艅 i kompresuje go dalej, u偶ywaj膮c .

Kodowanie Huffmana to forma kodowania entropijnego. Dzia艂a poprzez analiz臋 cz臋stotliwo艣ci ka偶dego symbolu (czy to litera艂u, czy okre艣lonego typu wska藕nika) w strumieniu danych. Nast臋pnie buduje niestandardow膮 ksi膮偶k臋 kodow膮, w kt贸rej:

  • Symbole, kt贸re pojawiaj膮 si臋 bardzo cz臋sto, otrzymuj膮 bardzo kr贸tkie kody binarne (np. zaledwie kilka bit贸w).
  • Symbole, kt贸re pojawiaj膮 si臋 rzadko, otrzymuj膮 d艂u偶sze kody binarne.

U偶ywaj膮c mniej bit贸w dla najcz臋stszych element贸w, og贸lny rozmiar strumienia danych jest znacznie zmniejszony. Po艂膮czenie zdolno艣ci LZ77 do znajdowania wzorc贸w i wydajno艣ci statystycznej kodowania Huffmana sprawia, 偶e algorytm DEFLATE jest niezwykle pot臋偶ny i wszechstronny, stanowi膮c bezstratny rdze艅 formatu PNG.

Tajna Bro艅 PNG: Filtrowanie Przed Kompresj膮

Chocia偶 algorytm DEFLATE jest pot臋偶ny, dzia艂a najlepiej na danych z du偶膮 ilo艣ci膮 powt贸rze艅. Naturalne obrazy, nawet te z du偶ymi obszarami pozornie jednolitego koloru, cz臋sto maj膮 subtelny szum lub gradienty, kt贸re przerywaj膮 d艂ugie, idealne ci膮gi identycznych bajt贸w. Aby dane obrazu sta艂y si臋 bardziej "kompresowalne" dla silnika DEFLATE, PNG stosuje kluczowy krok wst臋pny zwany filtrowaniem.

Koder PNG przetwarza obraz po jednej poziomej linii pikseli na raz (tzw. "scanline"). Zanim linia zostanie skompresowana, mo偶e zosta膰 "przefiltrowana". Nie oznacza to stosowania efektu wizualnego, jak rozmycie. Jest to odwracalna transformacja matematyczna, kt贸ra zast臋puje rzeczywiste warto艣ci pikseli mniejszymi, bardziej powtarzalnymi warto艣ciami r贸偶nicowymi. Chodzi o to, by zakodowa膰 *zmian臋* z jednego piksela na drugi, a nie absolutn膮 warto艣膰 samego piksela. Poniewa偶 s膮siednie piksele w obrazie s膮 cz臋sto bardzo podobne, te r贸偶nice s膮 cz臋sto ma艂ymi liczbami lub zerami, kt贸re s膮 znacznie 艂atwiejsze do skompresowania przez algorytm DEFLATE.

Dla ka偶dej linii skanowania koder PNG mo偶e wybra膰 jeden z pi臋ciu typ贸w filtr贸w, wybieraj膮c ten, kt贸ry wed艂ug jego przewidywa艅 da najbardziej kompresowalny wynik dla tej konkretnej linii. Typ u偶ytego filtru jest nast臋pnie zapisywany razem z przefiltrowanymi danymi, aby dekoder wiedzia艂, jak odwr贸ci膰 ten proces. Typy filtr贸w to:

  • Typ 0: None - Brak filtrowania. Surowe dane pikseli linii s膮 przekazywane bezpo艣rednio do kompresora.
  • Typ 1: Sub - Warto艣膰 ka偶dego piksela jest zast臋powana r贸偶nic膮 mi臋dzy nim a warto艣ci膮 piksela bezpo艣rednio po jego lewej stronie. Jest to bardzo skuteczne dla obraz贸w z 艂agodnymi gradientami poziomymi.
  • Typ 2: Up - Warto艣膰 ka偶dego piksela jest zast臋powana r贸偶nic膮 mi臋dzy nim a warto艣ci膮 piksela bezpo艣rednio nad nim w poprzedniej linii skanowania. Dzia艂a dobrze dla obraz贸w z wzorami pionowymi.
  • Typ 3: Average - Warto艣膰 ka偶dego piksela jest zast臋powana r贸偶nic膮 mi臋dzy nim a 艣redni膮 warto艣ci pikseli po jego lewej stronie i bezpo艣rednio nad nim. Jest to dobry filtr og贸lnego przeznaczenia, kt贸ry dobrze radzi sobie z gradientami uko艣nymi.
  • Typ 4: Paeth - To najbardziej z艂o偶ony filtr. Przewiduje warto艣膰 bie偶膮cego piksela na podstawie trzech najbli偶szych s膮siad贸w (lewy, g贸rny i lewy-g贸rny), a nast臋pnie wybiera tego s膮siada, kt贸ry jest najbli偶szy przewidywanej warto艣ci. Piksel jest nast臋pnie zast臋powany r贸偶nic膮 mi臋dzy jego rzeczywist膮 warto艣ci膮 a warto艣ci膮 wybranego s膮siada. Doskonale radzi sobie ze z艂o偶onymi, dwuwymiarowymi wzorami.

Ten inteligentny krok filtrowania jest g艂贸wnym powodem, dla kt贸rego PNG jest cz臋sto znacznie bardziej wydajny w kompresji grafik i diagram贸w ni偶 starsze formaty, takie jak GIF, kt贸re nie posiadaj膮 tego zaawansowanego etapu wst臋pnego przetwarzania.

Wszechstronno艣膰 PNG: Tryby Kolor贸w i Przezroczysto艣膰

PNG zosta艂 zaprojektowany, aby by膰 wysoce elastycznym, zdolnym do obs艂ugi szerokiej gamy typ贸w obraz贸w. Osi膮ga to dzi臋ki obs艂udze wielu tryb贸w kolor贸w i rewolucyjnemu podej艣ciu do przezroczysto艣ci.

Obs艂uga Kolor贸w

PNG nie jest ograniczony do jednej reprezentacji kolor贸w. Obs艂uguje kilka tryb贸w w celu wydajnego przechowywania r贸偶nych rodzaj贸w obraz贸w:

  • Skala Szaro艣ci: Dla obraz贸w czarno-bia艂ych. Mo偶e u偶ywa膰 do 16 bit贸w na piksel dla ogromnego zakresu odcieni szaro艣ci.
  • Kolor Indeksowany: Ten tryb jest podobny do GIF. U偶ywa palety do 256 kolor贸w. Jest idealny dla obraz贸w z ograniczon膮 liczb膮 kolor贸w, aby osi膮gn膮膰 mniejszy rozmiar pliku ni偶 tryby pe艂nokolorowe.
  • Truecolor: Jest to najcz臋stszy tryb dla obraz贸w wysokiej jako艣ci. Przechowuje pe艂n膮 informacj臋 o kolorze RGB, zazwyczaj u偶ywaj膮c 24 bit贸w na ka偶dy z Czerwonego, Zielonego i Niebieskiego), co pozwala na ponad 16.7 miliona r贸偶nych kolor贸w.

Rewolucyjna Przezroczysto艣膰: Kana艂 Alfa

By膰 mo偶e najwa偶niejsz膮 zalet膮 PNG nad GIF jest obs艂uga pe艂nego . Podczas gdy GIF oferuje tylko binarn膮 przezroczysto艣膰 (piksel jest albo w pe艂ni widoczny, albo w pe艂ni niewidoczny), PNG pozwala na zmienne poziomy przezroczysto艣ci.

Gdy obecny jest kana艂 alfa (w trybach Skali Szaro艣ci lub Truecolor), dla ka偶dego piksela przechowywane jest dodatkowe 8 lub 16 bit贸w danych. Dane te nie reprezentuj膮 koloru, lecz poziom nieprzezroczysto艣ci piksela, na skali od 0 (ca艂kowicie przezroczysty) do 255 (ca艂kowicie nieprzezroczysty). Pozwala to na zaawansowane efekty, takie jak g艂adkie, antyaliasingowe kraw臋dzie, cienie wtapiaj膮ce si臋 w t艂o oraz szkliste, przezroczyste obiekty. Ta cecha uczyni艂a PNG standardowym formatem dla grafik internetowych, logo i ikon, kt贸re musz膮 by膰 p艂ynnie nak艂adane na r贸偶ne t艂a.

    Kompresja PNG | Teleinf Edu