PNG
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.
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 ).
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 .
PNG umożliwia głównie zapisywanie obrazów rastrowych w różnych formatach :
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.
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 .
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 ).
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.
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.
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.
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 |
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 |
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 fonctionPo 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 fonctionLista 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 fonctionPrzykł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 |
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.
Kompresję można wykonać za pomocą biblioteki zlib (C / C ++). Możliwe jest również wygenerowanie CRC przy użyciu tej biblioteki.
Inne formaty: