PNG (ang. Portable Network Graphics) –rastrowyformat plików graficznych oraz systembezstratnej kompresji danychgraficznych.
PNG został opracowany jako następcaGIF w1995 roku po ogłoszeniu przezUnisys orazCompuServe roszczeńpatentowych dotyczącychkompresjiLZW używanej w formatach GIF orazTIFF. Format PNG zalecany jest przezkonsorcjum W3C jako preferowany format grafiki dla sieciWWW[1]. Dotyczy to takich obszarów jak choćbygrafika prezentacyjna czy schematy blokowe.
PNG nie jest obciążonypatentami. Obsługuje stopniowaną przezroczystość (tzw.kanał alfa) oraz 48-bitową głębię kolorów czyli 16 bitów na kanał koloru. Dzięki temu można zapisać bezstratnie dowolne grafikiRGB (a nawetRGBA, czyli RGB+Alfa, do 32 bitów na piksel). Obsługuje też osadzone profile kolorówICC, ICM i daneEXIF[2].
Format PNG znajduje różne zastosowania. Przewiduje tryby o niskiej ilości kolorów (paletowe od 2 do 256 oraz tryb skali szarości), przydatne w sytuacjach, gdy nadmiarowa informacja jest niewskazana (tj. gdy ważniejsza od subiektywnej wierności oryginałowi jest treść obrazu). Ma także tryb 48-bitowego RGB, w którym można zapisywać obraz w milionach kolorów i bez jakichkolwiek zniekształceń właściwych formatom stratnym, do jakich należy np. popularnyJPEG.
Większość prostych narzędzi graficznych (np.IrfanView iXnView) umożliwia dowolną, ręczną redukcję koloru. Narzędzia bardziej zaawansowane (np.GIMP) oferują pracę na warstwach oraz automatyczną redukcję liczby kolorów, dostępną po przełączeniu z paletyRGB (Red-Green-Blue) na tzw.kolor indeksowany. W tym trybie możliwe staje się zapisanie tylko niezbędnych informacji – np. o kolorach dominujących.
Jedną z technik zastosowanych w PNG jest używanie prostych filtrów graficznych, które mogą uprościć dane obrazu przed kompresją, zwiększając jej wydajność. Jest dostępne kilka filtrów (np. różnica między sąsiednimi pikselami/liniami), które są dobierane dla każdej linii pliku z osobna.
Niektóre programy pozwalają wybrać „stopień kompresji” – nie jest to cecha formatu PNG, a jedynie ustawienie specyficzne dla danego programu, który np. rezygnuje z dobierania najlepszej kombinacji filtrów, aby przyspieszyć zapisywanie[potrzebny przypis].
Istnieją programy na wolnych licencjach takie jakPNGcrush,optipng iadvpng (w pakiecie Advancecomp) orazfreeware’owyPNGOUT(inne języki), które potrafią optymalizować pliki PNG – sprawdzają ogromną ilość kombinacji filtrów PNG i parametrów kompresoragzip, dając w rezultacie pliki dużo mniejsze niż zapisywane popularnymi programami graficznymi. Tak zoptymalizowane pliki PNG są prawie zawsze mniejsze od plikówGIF[potrzebny przypis].
Format PNG zapisuje tylko pojedyncze pliki graficzne (nie ma animacji). Analogicznymi formatami mającymi możliwość zapisu sekwencji grafiki animowanej w jednym pliku sąMNG iAPNG.
Kompresja polega na dokonaniu jednej z transformacji każdej z liniiobrazu, po czym wynik jest kompresowany za pomocąalgorytmudeflate. Numer transformacji jest zapisywany przed linią.
Transformacje mają na celu przystosowanie danych do łatwiejszej kompresji. Zapisują one różnicę między wartością rzeczywistąpiksela a wartością obliczoną na podstawie funkcji przewidującej, działającej w oparciu obity już odkodowane. Zwykle różnica ta jest niewielka.
Funkcje przewidujące to m.in.:
- tyle samo co piksel po lewej
- tyle samo co średnia wartości pikseli po lewej i na górze
- tyle samo co suma wartości pikseli po lewej i na górze minus piksel po lewej górnej przekątnej
PNG jest określony standardemRFC 2083 ↓. Używany przez niego algorytmdeflate jest określony wRFC 1951 ↓.
Przy zapisie (kompresji) plików PNG stosowana jest często bibliotekazlib.
Pierwsze 8 bajtów pliku PNG jest następującą sygnaturą:
89 "PNG" 0D 0A 1A 0A
89 – charakterystyczny bajt, którego prawdopodobieństwo wystąpienia na początkupliku tekstowego jest niewielkie
"PNG" – ciąg identyfikujący format pliku
0D 0A – sekwencja końca linii z formatu DOS-owego
1A – znak końca pliku w systemach z rodziny Windows
0A – bajt pozwala wykryć konwersję z unixowego formatu końca linii na DOS-owy
- GynvaelG. Coldwind GynvaelG.,Zrozumieć programowanie,TomaszT. Łopuszański (red.), wyd. 1, Warszawa: Wydawnictwo Naukowe PWN SA, 2017, s. 459–461,ISBN 978-83-01-19787-3 .
- P.P. Deutsch P.P.,DEFLATE Compressed Data Format Specification version 1.3,RFC 1951,IETF, maj 1996,DOI: 10.17487/RFC1951,ISSN2070-1721,OCLC 943595667 (ang.).
- T.T. Boutell T.T.,PNG (Portable Network Graphics) Specification Version 1.0,RFC 2083,IETF, marzec 1997,DOI: 10.17487/RFC2083,ISSN2070-1721,OCLC 943595667 (ang.).
- strona domowa PNG
- Rekomendacja W3C dla formatu PNG
- Strona W3C