PNG
Udvidelse | .PNG |
---|---|
MIME-type | image/png |
Underskrift | 89 50 4E 47 0D 0A 1A 0A( hexa ) |
Udviklet af | W3C |
Oprindelig version | 1 st oktober 1996 |
Formattype | matrix billedformat tabsfri |
Baseret på | Tøm luft |
Standard | ISO 15948 , W3C , IETF RFC 2083 |
ISO | 15948 |
Specifikation | Åbent format |
Websteder |
(da) www.libpng.org/pub/png (en) png-mng.sourceforge.net/pub/png |
Den bærbare netværksgrafik ( PNG ) er en skærm åben for digitale billeder , som blev oprettet for at erstatte formatet GIF på det tidspunkt ejeren, og hvis komprimering var underlagt et patent . PNG er et format uden tab, der er specielt tilpasset til udgivelse af billeder inklusive enkle flade farver.
Det er standardiseret af ISO (ISO / IEC 15948: 2004).
PNG er en specifikation til internettet og genstand for en W3C-anbefaling og en RFC . Det blev oprettet for at omgå den eksisterende licens på GIF-formatet, det mest populære i slutningen af 1990'erne, Unisys , ejer af to patenter på algoritmer, der blev anvendt ved komprimering under GIF efter at have krævet royalties. PNG blev derefter defineret, men ved at øge kapaciteterne i GIF.
PNG er særligt velegnet, når det kommer til at gemme syntetiske billeder beregnet til internettet, såsom grafik, ikoner , billeder, der repræsenterer tekst (god bevarelse af læsbarhed) eller billeder med gradienter. PNG overgår konsekvent GIF med hensyn til reduktion af filstørrelse (med et velvalgt farveskema) eller kvalitet (da det ikke er begrænset til 256 farver ).
PNG's karakteristika gør det muligt at gemme fotografier uden tab af data til skade for filstørrelsen, der logisk set er meget større end formaterne til datatab beregnet til fotografier, såsom JPEG eller JPEG 2000 .
PNG giver dig primært mulighed for at gemme rasterbilleder i forskellige formater :
Efter anvendelse af et intelligent filter, som generelt giver højere niveauer af kompression , der skal opnås , er det hele komprimeres uden tab efter deflate algoritmen ( RFC 1951 ), som regel med zlib , men zopfli kan også anvendes med apps som advpng.
Pixel- komponenter eller paletindgange gives enten i RGB- format (rød, grøn, blå) eller i RGBA-format (med en ekstra alfakanal til gennemskinnelighed). I dette tilfælde bruges yderligere 8 eller 16 bits pr. Pixel eller pr. Paletindgang, hvilket giver 16 bit til et gråtonebillede, 32 bit til et ægte farvebillede og 64 bit til et 4-kanalsbillede på 16 bit hver.
Tilstedeværelsen af en alfakanal, der definerer forskellige niveauer af gennemsigtighed, gør den ideel til komposition på websider. Denne funktion er godt implementeret af de fleste webbrowsere .
Når PNG-billedet bruger en palet på op til 256 farver, er det muligt at bruge en af farverne til gennemsigtighed.
Dette er den samme adfærd som med GIF- format, og det fungerer endda med Internet Explorer 6 . Derfor kan webbilleder i GIF- format konverteres til denne version af PNG uden frygt for uforenelighed med størstedelen af de nuværende webbrowsere (første kvartal 2006) og uden patentproblemer ( GIF- patentet faldt i 2006 i det offentlige område ).
PNG, i øvrigt undertiden rekursivt benævnt PNG's Not GIF ( PNG er ikke GIF ), kan gøre alt, hvad GIF kan gøre og mere, såsom gennemsigtighed . Det var imidlertid ikke beregnet til at lave bevægelige billeder, men det afledte MNG- format blev oprettet af dets forfattere til dette formål (se også APNG- formatet ).
Begge formater kan interlaced , men PNG bruger Adam7- algoritmen, mens GIF i dette tilfælde viser billedet linje for linje.
En " klump " er en stor del af filen, et fragment af information, der udgør en enhed. Dette engelske udtryk bruges i mange multimedieformater.
En fil kan indeholde flere data klumper IDATsamt et stykke, PLTEsom paletten kan bruges til, hvis det er et billede, hvis farver er indekseret.
En fil kan også indeholde andre sekundære klumper, herunder tekstinformation.
En PNG-fil starter med en underskrift på 8 byte repræsenteret ved følgende decimaltal 137 80 78 71 13 10 26 10eller hexadecimal: 89 50 4E 47 0D 0A 1A 0A.
Resten af filen er opdelt i flere dele af varierende længde, kaldet klump.
Der er 18 officielle klumper , herunder 4 primære og 14 sekundære.
De klumper er mærket (udpeget). Den pause er vigtig i navnene på bidder . Hver etiket er defineret af fire på hinanden følgende tegn, der definerer en mnemonic kode , i form af fourCC . For hvert stykke , hvis det første bogstav i dets navn er stort, er det et kritisk stykke , ellers er det et ekstra stykke .
Her er en tabel over de mest brugte bidder (de fire vigtigste i spidsen):
Efternavn | Beskrivelse | Indeholder | Betydning | Hændelse |
---|---|---|---|---|
IHDR |
Billede header fil header |
Billedbredde i pixels |
Obligatorisk | Efter underskrivelse af PNG |
PLTE |
Palet til billedpalet |
Farvetabel | Valgfri | Mellem IHDRog 1 st chunkIDAT |
IDAT |
Billeddata Datablok |
Billeddata | Obligatorisk | Mellem IHDReller PLTEogIEND |
IEND |
Image trailer Slut på fil |
ikke noget | Obligatorisk | Endelig |
tIME |
Billedets sidste ændringstid Tidsstempel |
Valgfri | Overalt | |
iTXt |
Internationale tekstdata International tekstinformation (måske komprimeret zlib) |
Valgfri | Overalt | |
tEXt |
Tekstdata Ukomprimeret tekstinformation |
Valgfri | Overalt | |
zTXt |
Komprimeret tekstdata Komprimeret tekstinformation (zlib) |
Valgfri | Overalt |
De andre ti sekundære klumper er:
bKGD Baggrundsfarve | pHYs Fysiske pixeldimensioner |
cHRM Primære kromatiske egenskaber og hvidt punkt | sBIT Væsentlige bits |
gAMA Gamma-billede | sPLT Foreslået palet |
hIST Billedhistogram | sRGB Standard RGB-farverum |
iCCP Indbygget ICC-profil | tRNS Gennemsigtighed |
Andre bidder kan også defineres. De er enten offentlige eller private, men skal overholde navngivningsreglerne. En offentlig del skal være registreret hos W3C , den myndighed, der er udpeget af ISO / IEC .
Her er de offentlige klumper, der er i brug:
dSIG Digital signatur | oFFs Offset billede |
eXIf Udskifteligt profilformat (Exif) -profil | pCAL Kalibrering af pixelværdier |
fRAc Fraktale billedparametre | sCAL Fysisk skala for billedemnet |
gIFg GIF Grafisk kontroludvidelse | sTER Indikator for stereobillede |
gIFx GIF-applikationsudvidelse |
En klump består af 4 dele:
LÆNGDE | TYPE | DATAS | CRC |
---|---|---|---|
Datalængde | Type klump | Data, hvis længde i byte er specificeret i LENGTH | Styring |
4 byte | 4 byte | n byte | 4 byte |
LÆNGDE: Størrelsen i bytes af klumpen, kun dens data. Vi tager ikke højde for størrelse, type eller CRC.
TYPE: Navnet på den luns (f.eks IHDR, IDAT, IENDetc.).
DATAS: Oplysninger om klumper over n byte (relateret til LÆNGDE).
CRC: 4 kontrolbyte genereret ved hjælp af 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 alt klumpet er scannet, er værdien, der returneres af det sidste opkald til maj_crc () , ikke værdien for crc. det er stadig nødvendigt at invertere værdien af hver bit:
fonction validation_crc((entier positif 4 octets) crc) retourner (crc xb 0xffffffff) fin fonctionDen table_crc () liste i maj_crc () består af vilkårlige men beregnelige værdier. nogle implementeringer viser disse værdier (beregnes derefter på forhånd) og gemmer dem direkte i variablen, mens andre indeholder algoritmen (normalt en funktion) til at 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 af følgende binære data, repræsenteret her i hexadecimal:
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 data skal fortolkes i henhold til tabellen.
Data (i hexadecimal) |
Beskrivelse | Værdi (i decimal) |
---|---|---|
00 00 00 0D | Datalængde | 13 |
49 48 44 52 | Klump type / navn | IHDR |
00 00 03 20 | Bredde | 800 |
00 00 02 58 | Højde | 600 |
10 | Bit dybde | 16 |
06 | Farvetype | 6 |
00 | Kompressionsmetode | 0 |
00 | Filtreringsmetode | 0 |
00 | Interlacing metode | 0 |
15 14 15 27 | CRC | 353637671 |
Den komprimeringsmetode, der er 0angivet i IHDR(den eneste mulige i PNG-format), refererer til komprimering af deflate / inflate . Komprimering udføres kun på data fra klumper IDAT.
Komprimering kan udføres ved hjælp af zlib- biblioteket (C / C ++). Det er også muligt at generere CRC ved hjælp af dette bibliotek.
Andre formater: