PNG
Utvidelse | .PNG |
---|---|
MIME-type | image/png |
Signatur | 89 50 4E 47 0D 0A 1A 0A( heksa ) |
Utviklet av | W3C |
Innledende versjon | 1 st oktober 1996 |
Formattype | matrise bildeformat tapsfri |
Basert på | Tøm luft |
Standard | ISO 15948 , W3C , IETF RFC 2083 |
ISO | 15948 |
Spesifikasjon | Åpent format |
Nettsteder |
(en) www.libpng.org/pub/png (en) png-mng.sourceforge.net/pub/png |
The Portable Network Graphics ( PNG ) er en skjerm åpen til digitale bilder , som ble opprettet for å erstatte formatet GIF , på den tiden eieren og hvis kompresjon var gjenstand for en patent . PNG er et format uten tap spesielt tilpasset for publisering av bilder, inkludert enkle flate farger.
Den er standardisert av ISO (ISO / IEC 15948: 2004).
PNG er en spesifikasjon for Internett og gjenstand for en W3C-anbefaling og en RFC . Den ble opprettet for å omgå den eksisterende lisensen på GIF-format, den mest populære på slutten av 1990-tallet, Unisys , eier av to patenter på algoritmer brukt av komprimering under GIF etter å ha hevdet royalties. PNG ble deretter definert, men ved å øke kapasiteten til GIF.
PNG er spesielt godt egnet når det gjelder lagring av syntetiske bilder beregnet på nettet, for eksempel grafikk, ikoner , bilder som representerer tekst (god bevaring av lesbarhet) eller bilder med gradienter. PNG overgår konsekvent GIF når det gjelder reduksjon av filstørrelse (med et godt valgt fargevalg) eller kvalitet (siden det ikke er begrenset til 256 farger ).
Egenskapene til PNG gjør det mulig å lagre fotografier uten tap av data , til skade for filstørrelsen som fortsatt er logisk mye større enn for formater med tap av data beregnet på fotografier, som JPEG eller JPEG 2000 .
PNG lar deg hovedsakelig lagre rasterbilder i forskjellige formater :
Etter påføring av et forutsigende filter som generelt tillater høyere nivåer av kompresjon som kan oppnås , er det hele komprimeres uten tap etter den deflate algoritmen ( RFC 1951- ), vanligvis med zlib , men zopfli kan også brukes med programmer som advpng.
Piksel komponenter eller palett oppføringer er gitt enten i RGB -formatet (rød, grønn, blå) eller i RGBA-format (med en ytterligere alfakanal for gjennomlysbarheten). I dette tilfellet brukes ytterligere 8 eller 16 bits per piksel eller per palettoppføring, noe som gir 16 bits for et gråtonebilde, 32 bits for et ekte fargebilde og 64 bits for et 4-kanalsbilde på 16 bits hver.
Tilstedeværelsen av en alfakanal som definerer forskjellige nivåer av gjennomsiktighet, gjør den ideell for komposisjon på websider. Denne funksjonen er godt implementert av de fleste nettlesere .
Når PNG-bildet bruker en palett på opptil 256 farger, er det mulig å bruke en av fargene for gjennomsiktighet.
Dette er den samme oppførselen som med GIF- format, og den fungerer til og med med Internet Explorer 6 . Derfor kan nettbilder i GIF- format konverteres til denne versjonen av PNG uten frykt for inkompatibilitet med de fleste nåværende nettlesere (første kvartal 2006), og uten patenter bekymringer ( GIF- patentet falt i 2006 i det offentlige rom ).
PNG, forresten noen ganger rekursivt referert til som PNGs Not GIF ( PNG er ikke GIF ), kan gjøre alt GIF kan gjøre og mer, for eksempel gjennomskinnelighet . Imidlertid var det ikke ment å lage bevegelige bilder, men det avledede MNG- formatet ble opprettet av forfatterne for dette formålet (se også APNG- formatet ).
Begge formatene kan flettes sammen , men PNG bruker Adam7- algoritmen mens GIF i dette tilfellet viser bildet linje for linje.
En " del " er en stor del av filen, et fragment av informasjon som utgjør en enhet. Dette engelske begrepet brukes i mange multimediaformater.
En fil kan inneholde flere data biter IDATog en del som PLTEpaletten kan bruke hvis det er et bilde hvis farger er indeksert.
En fil kan også inneholde andre sekundære biter, inkludert tekstinformasjon.
En PNG fil starter med en signatur av 8 byte representert ved følgende desimalverdier 137 80 78 71 13 10 26 10eller heksadesimal: 89 50 4E 47 0D 0A 1A 0A.
Resten av filen er delt inn i flere deler av varierende lengde, kalt klump.
Det er 18 offisielle biter , inkludert 4 primære og 14 sekundære.
De biter er merket (oppnevnt). The break er viktig i navn på biter . Hver etikett er definert av fire påfølgende tegn, som definerer en mnemonisk kode , i form av fourCC . For hver del , hvis den første bokstaven i navnet er stort, er det en kritisk del , ellers er det en ekstra del .
Her er en tabell over de mest brukte bitene (de fire viktigste i spissen):
Etternavn | Beskrivelse | Inneholder | Betydning | Hendelse |
---|---|---|---|---|
IHDR |
Bildeoverskrift Filoverskrift |
Bildebredde i piksler |
Obligatorisk | Etter signering av PNG |
PLTE |
Bilde palett palett |
Fargetabell | Valgfri | Mellom IHDRog en st blingsIDAT |
IDAT |
Bildedata Datablokk |
Bildedata | Obligatorisk | Mellom IHDReller PLTEogIEND |
IEND |
Bildetrailer Slutt på fil |
ingenting | Obligatorisk | Til slutt |
tIME |
Bilde siste endringstid Stempel |
Valgfri | Hvor som helst | |
iTXt |
Internasjonal tekstdata Internasjonal tekstinfo (kanskje komprimert zlib) |
Valgfri | Hvor som helst | |
tEXt |
Tekstdata Ukomprimert tekstinfo |
Valgfri | Hvor som helst | |
zTXt |
Komprimert tekstdata Komprimert tekstinfo (zlib) |
Valgfri | Hvor som helst |
De andre ti sekundære biter er:
bKGD Bakgrunnsfarge | pHYs Fysiske pikselmål |
cHRM Primære kromaticiteter og hvitt punkt | sBIT Betydelige biter |
gAMA Gamma-bilde | sPLT Foreslått palett |
hIST Bildehistogram | sRGB Standard RGB-fargerom |
iCCP Innebygd ICC-profil | tRNS Åpenhet |
Andre biter kan også defineres. De er enten offentlige eller private, men må oppfylle navnereglene. En offentlig del må ha blitt registrert hos W3C , myndigheten utpekt av ISO / IEC .
Her er de offentlige biter som er i bruk:
dSIG Digital signatur | oFFs Offset-bilde |
eXIf Utskiftbart bildeformat (Exif) -profil | pCAL Kalibrering av pikselverdier |
fRAc Fraktalbildeparametere | sCAL Fysisk skala av bildemotivet |
gIFg GIF Grafisk kontrollutvidelse | sTER Indikator for stereobilde |
gIFx GIF-applikasjonsutvidelse |
En del består av fire deler:
LENGDE | TYPE | DATAS | CRC |
---|---|---|---|
Datalengde | Type del | Data hvis lengde i byte er spesifisert i LENGTH | Kontroll |
4 byte | 4 byte | n byte | 4 byte |
LENGDE: Størrelsen i byte på bunnen, bare dens data. Vi tar ikke hensyn til størrelse, type eller CRC.
TYPE: Navnet på blings (f.eks IHDR, IDAT, IENDosv).
DATAS: Informasjon relatert til mengden over n byte (knyttet til LENGDE).
CRC: 4 sjekkbyte generert ved hjelp av følgende algoritme:
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 fonctionNår hele klumpen er skannet, er ikke verdien som ble returnert av den siste samtalen til maj_crc () den for crc. det er fortsatt nødvendig å invertere verdien av hver bit:
fonction validation_crc((entier positif 4 octets) crc) retourner (crc xb 0xffffffff) fin fonctionTabellen_crc () -listen i maj_crc () består av vilkårlige men kalkulerbare verdier. noen implementeringer viser disse verdiene (deretter beregnet på forhånd) og lagrer dem direkte i variabelen, mens andre inneholder algoritmen (vanligvis en funksjon) for å beregne dem:
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 fonctionKlumpeksemplet IHDRbestår av følgende binære data, representert her i heksadesimal:
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
Disse dataene skal tolkes i henhold til tabellen.
Data (i heksadesimal) |
Beskrivelse | Verdi (i desimal) |
---|---|---|
00 00 00 0D | Datalengde | 1. 3 |
49 48 44 52 | Klump type / navn | IHDR |
00 00 03 20 | Bredde | 800 |
00 00 02 58 | Høyde | 600 |
10 | Bit dybde | 16 |
06 | Fargetype | 6 |
00 | Komprimeringsmetode | 0 |
00 | Filtreringsmetode | 0 |
00 | Interlace-metode | 0 |
15 14 15 27 | CRC | 353637671 |
Kompresjonsmetoden 0spesifisert i IHDR(den eneste mulige i PNG-format) refererer til komprimering av lufting / oppblåsing . Komprimering gjøres bare på klumpdata IDAT.
Komprimering kan gjøres ved hjelp av zlib- biblioteket (C / C ++). Det er også mulig å generere CRC ved hjelp av dette biblioteket.
Andre formater: