Przenośna Grafika Sieciowa

PNG
Portable Network Graphic Obraz w Infobox. Obraz PNG z przezroczystym tłem na białym tle Charakterystyka
Rozbudowa .PNG
Typ MIME image/png
Podpis 89 50 4E 47 0D 0A 1A 0A( heksa )
Opracowany przez W3C
Początkowa wersja 1 st październik 1996
Typ formatu bezstratny format obrazu matrycy
Oparte na Siadać
Standard ISO 15948 , W3C , IETF RFC 2083
ISO 15948
Specyfikacja Otwarty format
Witryny internetowe (en)  www.libpng.org/pub/png
(en)  png-mng.sourceforge.net/pub/png

Portable Network Graphics ( PNG ) to ekran otwarty do zdjęć cyfrowych , który został stworzony, aby zastąpić format GIF , w tym czasie właściciela i których kompresja była przedmiotem patentu . PNG to format bez strat specjalnie przystosowany do publikowania obrazów, w tym prostych, płaskich kolorów.

Został znormalizowany przez ISO (ISO / IEC 15948: 2004).

PNG jest specyfikacją internetową i przedmiotem rekomendacji W3C i RFC . Został utworzony, aby obejść istniejącą licencję na format GIF, najpopularniejszy pod koniec lat 90. Unisys , właściciel dwóch patentów na algorytmy używane przez kompresję w formacie GIF, który zażądał tantiem. Następnie zdefiniowano PNG, ale poprzez zwiększenie możliwości formatu GIF.

posługiwać się

Do obrazów syntetycznych

PNG jest szczególnie przydatny, jeśli chodzi o zapisywanie syntetycznych obrazów przeznaczonych do Internetu, takich jak grafiki, ikony , obrazy przedstawiające tekst (dobre zachowanie czytelności) lub obrazy z gradientami. PNG konsekwentnie przewyższa GIF pod względem zmniejszenia rozmiaru pliku (przy dobrze dobranym schemacie kolorów) lub jakości (ponieważ nie jest ograniczony do 256 kolorów ).

Do zdjęć

Cechy PNG pozwalają na zapisywanie zdjęć bez utraty danych , ze szkodą dla rozmiaru pliku, który jest logicznie znacznie większy niż formatów utraty danych przeznaczonych do zdjęć, takich jak JPEG lub JPEG 2000 .

Szczegóły formatu

PNG umożliwia głównie zapisywanie obrazów rastrowych w różnych formatach  :

Zobacz artykuł Obraz cyfrowy, aby uzyskać wyjaśnienie tych pojęć.

Po zastosowaniu filtru predykcyjnego, który generalnie pozwala na uzyskanie wyższych poziomów kompresji , całość jest kompresowana bez strat zgodnie z algorytmem deflate ( RFC 1951 ), zwykle za pomocą zlib , ale zopfli może być również używany z aplikacjami takimi jak advpng.

Składowe pikseli lub wpisy palety są podawane w formacie RGB (czerwony, zielony, niebieski) lub w formacie RGBA (z dodatkowym kanałem alfa dla przezroczystości). W tym przypadku dodatkowych 8 lub 16 bitów jest używanych na piksel lub na wpis palety, co daje 16 bitów dla obrazu w skali szarości, 32 bity dla obrazu w pełnym kolorze i 64 bity dla 4-kanałowego obrazu po 16 bitów każdy.

Przezroczystość

Obecność kanału alfa definiującego różne poziomy przezroczystości sprawia, że ​​idealnie nadaje się do kompozycji na stronach internetowych. Ta funkcja jest dobrze zaimplementowana w większości przeglądarek internetowych .

Przezroczystość

Gdy obraz PNG używa palety maksymalnie 256 kolorów, można użyć jednego z kolorów do przezroczystości.

Jest to takie samo zachowanie, jak w przypadku formatu GIF , a nawet działa z przeglądarką Internet Explorer 6 . Dlatego obrazy internetowe w formacie GIF mogą być konwertowane do tej wersji PNG bez obawy o niekompatybilność z większością obecnych przeglądarek internetowych (pierwszy kwartał 2006) i bez zastrzeżeń patentowych (patent GIF spadł w 2006 roku do domeny publicznej ).

Inne porównania z GIF

PNG, nawiasem mówiąc, czasami nazywany rekurencyjnie jako PNG to nie GIF ( PNG to nie GIF ), może robić wszystko, co GIF , a nawet więcej, na przykład przezroczystość . Jednak nie był on przeznaczony do tworzenia ruchomych obrazów, ale jego autorzy stworzyli pochodny format MNG (patrz także format APNG ).

Oba formaty można przeplatać , ale PNG używa algorytmu Adam7 , podczas gdy GIF w tym przypadku wyświetla obraz wiersz po wierszu.

Struktura pliku PNG

Minimalna kompozycja pliku PNG

  1. Podpis PNG - 8 bajtów
  2. fragment IHDRnagłówka - 25 bajtów
  3. fragment IDATdanych - zmienna długość
  4. fragment IENDna koniec pliku - 12 bajtów

A „  klocek  ” to duży fragment pliku, fragment informacji stanowiących podmiot. Ten angielski termin jest używany w wielu formatach multimedialnych.

Plik może zawierać kilka fragmentów danych, IDATa także fragment PLTEdo wykorzystania przez paletę, jeśli jest to obraz, którego kolory są indeksowane.

Plik może również zawierać inne dodatkowe porcje, w tym informacje tekstowe.

Podpis PNG

PNG uruchamia plik z podpisem 8 bajtów reprezentowanych przez następujące wartości dziesiętnych 137 80 78 71 13 10 26 10lub szesnastkowym: 89 50 4E 47 0D 0A 1A 0A.

Reszta pliku jest podzielona na kilka części o różnej długości, zwanych fragmentami.

Nazewnictwo porcji

Jest 18 oficjalnych fragmentów , w tym 4 podstawowe i 14 dodatkowych.

Te kawałki są oznakowane (powołany). Przerwa jest ważne w nazwach kawałki . Każda etykieta jest definiowana przez cztery kolejne znaki, definiujące kod mnemoniczny , w postaci fourCC . Dla każdego fragmentu , jeśli pierwsza litera jego nazwy jest pisana wielką literą, jest to fragment krytyczny, w przeciwnym razie jest to fragment pomocniczy.

Oto tabela najczęściej używanych fragmentów (cztery główne na czele):

Nazwisko Opis Zawiera Znaczenie Występowanie
IHDR Nagłówek obrazu Nagłówek
pliku

Szerokość obrazu w pikselach
Wysokość obrazu w pikselach
Głębia bitowa (1, 2, 4, 8 lub 16)
Typ koloru (0, 2, 3, 4 lub 6)
Metoda kompresji (0)
Filtrowanie metody (0) Metoda
przeplotu: 0 (bez) lub 1 (z Adam7)

Obowiązkowy Po podpisaniu PNG
PLTE Paleta
obrazów
Tabela kolorów Opcjonalny Pomiędzy IHDRi 1 st klocekIDAT
IDAT Dane obrazu
Blok danych
Dane obrazu Obowiązkowy Między IHDRlub PLTEaIEND
IEND Obraz zwiastun
Koniec pliku
nic Obowiązkowy W końcu
tIME
Znacznik czasu ostatniej modyfikacji obrazu

Opcjonalny Gdziekolwiek
iTXt Międzynarodowe dane tekstowe
Międzynarodowe informacje tekstowe
(być może skompresowane zlib)

Opcjonalny Gdziekolwiek
tEXt Dane
tekstowe Nieskompresowane informacje tekstowe

Opcjonalny Gdziekolwiek
zTXt Skompresowane dane tekstowe Skompresowane
informacje tekstowe (zlib)

Opcjonalny Gdziekolwiek

Pozostałe dziesięć dodatkowych fragmentów to:

bKGD Kolor tła pHYs Fizyczne wymiary w pikselach
cHRM Chromatyczność pierwotna i punkt bieli sBIT Znaczące bity
gAMA Obraz gamma sPLT Sugerowana paleta
hIST Histogram obrazu sRGB Standardowa przestrzeń kolorów RGB
iCCP Wbudowany profil ICC tRNS Przezroczystość


Można również zdefiniować inne fragmenty . Są publiczne lub prywatne, ale muszą spełniać zasady nazewnictwa. Publicznego kawałek musi być zarejestrowany z W3C , organ wyznaczony przez ISO / IEC .

Oto używane fragmenty publiczne:

dSIG Podpis cyfrowy oFFs Przesunięty obraz
eXIf Profil wymiennego formatu obrazu (Exif) pCAL Kalibracja wartości pikseli
fRAc Parametry obrazu fraktalnego sCAL Fizyczna skala przedmiotu obrazu
gIFg Rozszerzenie sterowania graficznego GIF sTER Wskaźnik obrazu stereo
gIFx Rozszerzenie aplikacji GIF

Skład kawałka

Kawałek składa się z 4 części:

DŁUGOŚĆ RODZAJ DATAS CRC
Długość danych Rodzaj porcji Dane, których długość w bajtach jest określona w LENGTH Kontrola
4 bajty 4 bajty n bajtów 4 bajty

LENGTH: Rozmiar porcji w bajtach, tylko jej dane. Nie bierzemy pod uwagę rozmiaru, typu ani CRC.

TYP: nazwa fragmentu (np IHDR, IDAT, IENDitp).

DATAS: Informacje odnoszące się do fragmentu na n bajtów (odnoszące się do LENGTH).

CRC: 4 bajty kontrolne wygenerowane przy użyciu następującego algorytmu:

fonction maj_crc((entier positif 4 octets) crc, (entier positif 1 octet) bloc(), (entier positif 4 octets) taille) //le premier argument, crc, lors du premier appel de cette fonction pour un chunk donné, doit être 0xffffffff (tous les bits à 1) //sinon, il doit s'agir de la valeur retournée par le précédent appel de cette fonction //le deuxième argument, bloc(), est une liste d'éléments d'un octet. Il s'agit de tout ou partie du chunk //le troisième argument, taille, est le nombre d'éléments de la liste bloc() (entier positif 4 octets) c, n, v c=crc pour n de 0 à (taille-1) //normalement, cette boucle ne contient qu'une seule instruction mais, ici, elle est subdivisée en quatre instructions. C'est plus lisible ainsi //il y a une itération de cette boucle pour chacun des octets de la partie DATA du chunk, dans l'ordre de leurs positions dans le chunk //xb=ou exclusif bit à bit v=c xb bloc(n) //eb=et bit à bit; tout nombre préfixé par 0x est en base 16 //on met à 0 les bits des trois premiers octets, vu que leur valeur ne dépend pas de celle de bloc(n) v=v eb 0xff //table_crc() est une liste de 256 constantes, des entiers codés sur quatre octets (voir ci-dessous) v=table_crc(v) //div=division entière c=v xb (c div 256) fin pour retourner c fin fonction

Po przeskanowaniu całego fragmentu wartość zwrócona przez ostatnie wywołanie maj_crc () nie jest wartością crc. nadal konieczne jest odwrócenie wartości każdego bitu:

fonction validation_crc((entier positif 4 octets) crc) retourner (crc xb 0xffffffff) fin fonction

Lista table_crc () w maj_crc () składa się z dowolnych, ale obliczalnych wartości. niektóre implementacje wymieniają te wartości (następnie obliczane z góry) i przechowują je bezpośrednio w zmiennej, podczas gdy inne zawierają algorytm (zwykle funkcję) do ich obliczania:

fonction calcul_table_crc() (entier positif 4 octets) c, i, j pour i de 0 à 255 c=i //8 itérations pour j de 0 à 7 //retourne 0 (faux) si c est pair et 1 (vrai) si c est impair (en dehors du dernier,tous les bits du résultat sont à 0) si (c eb 1) //la valeur 0xedb88320 (11101101 10111000 10001100 00100000 en binaire et 3 988 292 384 en décimal) est arbitraire //c étant, dans ce cas, nécessairement impair, c div 2 équivaut à (c-1)/2 c=0xedb88320 xb (c div 2) sinon c=c/2 fin si fin pour table_crc(i)=c fin pour fin fonction

Przykład fragmentu IHDR dla obrazu 800x600

Przykład porcji IHDRskłada się z następujących danych binarnych, przedstawionych tutaj w postaci szesnastkowej:

00 00 00 0D 49 48 44 52 00 00 03
20 00 00 02 58 10 06 00 00 00 15
14 15 27

Dane te należy interpretować zgodnie z tabelą.

Dane
(szesnastkowo)
Opis Wartość
(dziesiętnie)
00 00 00 0D Długość danych 13
49 48 44 52 Typ / nazwa fragmentu IHDR
00 00 03 20 Szerokość 800
00 00 02 58 Wysokość 600
10 Nieco głębia 16
06 Rodzaj koloru 6
00 Metoda kompresji 0
00 Metoda filtrowania 0
00 Metoda przeplotu 0
15 14 15 27 CRC 353637671

Kompresja danych

Metoda kompresji 0określona w IHDR(jedyna możliwa w formacie PNG) odnosi się do kompresji Deflate / Inflate . Kompresja jest wykonywana tylko na danych porcji IDAT.

W programowaniu

Kompresję można wykonać za pomocą biblioteki zlib (C / C ++). Możliwe jest również wygenerowanie CRC przy użyciu tej biblioteki.

Zobacz też

Powiązane artykuły

Inne formaty:

Linki zewnętrzne

Uwagi i odniesienia

  1. (in) ISO / IEC, „  Portable Network Graphics (PNG) Specification (Second Edition)  ” na w3.org , 10 listopada 2003.
  2. (en) ISO / IEC, „  Portable Network Graphics (PNG) Specification (Second Edition) - §5.4 - Chunk nazing conventions  ” , w3.org , 10 listopada 2003.
  3. (in) ISO / IEC, „  Specyfikacja Portable Network Graphics (PNG) (wydanie drugie) - § 4.9 - Rozszerzenie i rejestracja  ” na w3.org , 10 listopada 2003.
  4. (pl) opiekunowie specyfikacji PNG, Rozszerzenia specyfikacji PNG 1.2, wersja 1.5.0  " , 15 lipca 2017 r.