# PNG

PNG (acrònim de Portable Network Graphics, pronunciat ping) és un format gràfic basat en un algoritme de compressió sense pèrdua per bitmaps no subjecte a patents. Aquest format va ser desenvolupat en bona part per solucionar les deficiències del format GIF i permet emmagatzemar imatges amb una major profunditat de contrast i altres dades importants.
Les imatges PNG utilitzen l'extensió .png i han obtingut un tipus MIME (imatge/png) aprovat el 14 d'octubre de 1996.

## Història i desenvolupament

Les motivacions per crear el format PNG es van generar el 1995, després que la companyia Unisys anunciés que faria complir la patent de software de l'algoritme de compressió de dades LZW utilitzat pel GIF (patent dels Estats Units 4.558.302 i altres en la resta del món). Hi havia altres problemes amb el format GIF que feien desitjable un canvi, per exemple la seva limitació a paletes de 8 bits de 256 colors com a màxim, quan els ordinadors ja suportaven milers o milions de colors.
Originalment PNG era un acrònim recursiu que significava PNG no és GIF (PNG’s Not GIF), fent al·lusió a la tradició de sigles recursives de GNU. Encara que GIF suporti animació, el PNG va desenvolupar-se com un format d'imatge estàtic i es va crear el format MNG com la seva variant animada.
El PNG va guanyar més popularitat l'agost de 1999 quan Unisys va posar fi a la seva política de llicenciats de patents lliures de drets pels desenvolupadors de programari lliure o no comercial.
* L'especificació de la versió 1.0 de PNG va ser llançada l'1 de juliol de 1996 i després va aparèixer com RFC 2083. Ràpidament s va convertir en una recomanació W3C l'1 d'octubre de 1996.
* La versió 1.1 amb alguns petits canvis i amb 3 noves extensions o “chunks” va ser alliberada el 31 de desembre de 1998.
* La versió 1.2. Nova extensió. Va ser alliberada l'11 d'agost de 1999.
* Nova versió, lleugerament diferent a la de l'anterior i amb una nova extensió. Actualment PNG és un estàndard internacional (ISO/IEC 15940:2003), també recomanat per la W3C el 10 de novembre de 2003.
* L'estàndard a partir de 2004 és (ISO/IEC 15948:2004).

## Detalls tècnics

Un arxiu PNG comença com una firma de 8 bytes, els valors en hexadecimals són: 89 50 4E 47 0D 0A 1A 0A, els valors decimals són: 137 80 78 71 13 10 26 10; cada valor és allí per una raó específica.
| Byte(s) | Propòsit |
| 89 | Té el bit més alt, posat a 1 per detectar sistemes de transmissió que no suporten dades de 8 bits i per reduir el risc que un fitxer de text sigui erròniament interpretat com a PNG. |
| 50 4E 47 | En ASCII, les lletres "PNG" permetent que una persona identifiqui el format en cas de veure’l en un editor de text. |
| 0D 0A | Una nova línia amb estil DOS (CRLF) per detectar les conversions de final de línia entre DOS y UNIX. |
| 1A | Un byte que atura el desplegament del fitxer sota DOS quan s'ha utilitzat el comandament TYPE. |
| 0A | Una nova línia en UNIX (LF) per detectar la conversió de final de línia entre DOS y UNIX. |

## Segments de l'arxiu

Després de l'encapçalament es troben una sèrie de segments dels quals cada un guarda certa informació sobre la imatge. Els segments s'auto declaren com crítics (critical) o auxiliars (ancillary) de manera que un programa que troba un segment auxiliar i no l'entén pot ignorar-lo sense perill. L'estructura basada en segments està dissenyada per poder ampliar el format PNG mantenint la compatibilitat amb versions antigues. Cada una de les seccions té un encapçalament que especifica la seva mida i tipus, immediatament seguit de les dades i els checksum de les dades. Les seccions tenen un nom de 4 lletres que és sensible a les majúscules. L'ús de majúscules o minúscules en el nombre esmentat prové dels descodificadors d'informació sobre les seccions que no són reconegudes. Si la primera lletra és majúscula indica que la secció és essencial, en cas contrari serà auxiliar. Les seccions essencials són necessàries per llegir el fitxer, si el descodificador troba una secció essencial que no reconeix ha d'avortar la lectura. En el cas que la segona lletra sigui majúscula, significarà que la secció és pública en especificació o el registre de seccions per propòsits especials, en cas contrari serà privada (no estandarditzada). Aquest ús de majúscules i minúscules assegura que mai hi hagi conflictes entres seccions públiques i privades. La tercera lletra ha d'estar en majúscules per complir les especificacions de PNG i està reservada per futures expansions. La quarta lletra indica si és segur copiar la secció en cas que no sigui reconeguda, en cas d'estar en minúscules és segur copiar la secció sense importar la quantitat de modificació que hagi sofert el fitxer, si és majúscula s'haurà de copiar si no hi ha seccions crítiques que hagin sofert modificacions.

## Seccions essencials

Un descodificador ha de ser capaç d'entendre aquestes seccions per llegir i renderitzar un PNG:
* IHDR, ha de ser la primera secció, contenent l'encapçalament.
* PLTE, conté la paleta (llista de colors).
* IDAT, conté la imatge que ha de ser dividida en múltiples seccions IDAT, fent això s'incrementa la mida de la imatge lleugerament però fa possible generar imatges PNG en streaming.
* IEND, marca el final de la imatge.

## Seccions de metadades

Altres atributs que poden ser guardats en una imatge PNG són: valors de gamma, color de fons i la informació textual. PNG també suporta correcció de color amb l'ús de sistemes de maneig del color com sRGB.
* bKGD: conté el color de fons per defecte, s'utilitza quan no hi ha millor color disponible per mostrar, com en un visor d'imatges però en un navegador.
* cHRM: balanç de blanc
* gAMA: especifica la gamma
* hIST: guarda l'histograma o quantitat total de cada color en la imatge.
* iCCP: perfil ICC de color
* iTXt: conté text (UTF-8) comprimit o no
* pHYs: conté la mida prevista del píxel i/o la ràtio de la imatge.
* sBIT: (bits significatius) indiquen l'exactitud dels colors en la imatge.
* sPLT: suggereix una paleta per utilitzar en cas que el rang complet de colors no estigui disponible.
* sRGB: indica que s'utilitza l'estàndard sRBG color space.
* tWXt: emmagatzema text que pot ser representat en ISO 8859-1 amb un nombre = valor per cada secció
* tIME: emmagatzema la data de l'última modificació.
* tRNS: conté informació sobre la transparència. Per imatges indexades emmagatzema el canal alfa per una o més paletes per imatges en color real i escala de grisos emmagatzema la informació d'un sol píxel que és considerat completament transparent.
* zTXt: conté text comprimit amb els mateixos límits que tEXt.
La primera lletra en minúscules d'aquestes seccions indiquen que no són necessàries en l'especificació de PNG, L'última lletra en minúscula indica que és segur copiar-les inclús si l'aplicació en qüestió no la té. Altres atributs que poden ser emmagatzemats en un PNG inclouen valors de correcció gamma, color de fons i metadades. PNG a més, també utilitza la correcció de color que utilitzen els sistemes d'administració de color com el sRGB. Alguns programes com Adobe Photshop disposen d'aquest sistema.

## Profunditat de color

Les imatges en format PNG poden ser imatges de paleta indexada o estar formades per un o diversos canals. Si existeix més d'un canal, tots els canals tenen el mateix nombre de bits per píxel (també anomenat profunditat de bits per canal). Encara en l'especificació oficial del PNG es nombra la profunditat de bits per canal, normalment els programes d'edició nombren només la quantitat total dels bits per píxel, és a dir, la profunditat de color. El nombre de canals depèn de si la imatge és en escala de grisos o en color i si disposa de canal alfa (també anomenat canal de transparència). Les combinacions permeses per PNG són:
* Escala de grisos (1 canal).
* Escala de grisos i canal alfa (2 canals).
* Canals vermell, verd i blau (RGB, 3 canals, també anomenat color vertader o Truecolor.).
* Canals vermell, verd, blau i alfa (RGB + alfa, 4 canals).
D'altra banda, les imatges indexades disposen d'un màxim de 256 colors. Aquesta paleta de colors està emmagatzemada amb una profunditat de canal de 8 bits. La paleta no pot tenir més colors que els marcadors per la profunditat de bits, és a dir 2$^8$=256 colors, encara que en pot tenir menys (per exemple, una imatge de 50 colors només emmagatzemarà 50 entrada, evitant emmagatzemar dades que no són utilitzades.

## Transparència en la imatge

PNG ofereix una gran varietat d'opcions de transparència: amb el color vertader o escala de grisos, inclús un sol píxel pot ser declarat transparent o pot afegir-se un canal alfa. Per imatges que utilitzen paletes es poden afegir un canal alfa a les entrades de la paleta. El nombre dels valors esmentats emmagatzemats pot ser menor que el total d'entrades de la paleta, de manera que la resta de les entrades es consideraran completament opaques. La recerca de píxels amb transparència binaria hauria de fer-se abans de qualsevol reducció de color per evitar que alguns píxels es converteixin en transparents accidentalment. A diferència de la transparència oferta per GIF que només pot prendre 2 valors (completament transparent o completament opac), el canal alfa de PNG permet utilitzar major profunditat de bits per aconseguir efectes de semí-transparència, propis d'objectes translúcids. Per exemple, amb una profunditat de 8 bits per transparències es poden aconseguir 28 = 256 graus de transparència, com si es tractés d'un color.

## Compressió

El mètode de compressió utilitzat pel PNG és conegut com a deflació (a l'anglès “Deflate algorithm”). També existeixen mètodes de filtratge. En les especificacions de 1’2 es defineix un únic tipus de filtre que inclou 5 modes de predicció del valor del píxel que resulta molt útil de resta al color del píxel actual, el color pronosticat. Els cinc mètodes són None, Sub, Up, Average i Paeth. Aquests filtres poden reduir notablement la mida final de l'arxiu, encara que depèn en gran manera de la imatge d'entrada. L'algoritme de compressió pot encarregar-se de l'adequada elecció de mètodes que ofereixin major reducció. El tipus de media MIME per PNG és “imatge/png” (aprovat el 14 d'octubre de 1996).

## Animació

APNG és un format basat en PNG que suporta animació. APNG suporta el visionat d'una sola imatge en cas que el descodificador no entengui aquest format. És acceptat per Firefox i té extensió .png. MNG és un format d'imatge que suporta animació i està basat en les idees i en algunes seccions de PNG, però és un sistema complex i no permet el visionat d'una sola imatge, cosa que si que fa GIF i APNG.

## Comparació tècnica amb altres formats
### Comparació amb GIF

* En la majoria dels casos PNG comprimeix millor que el format GIF, encara que algunes implementacions (vegis Photoshop) realitzen una mala selecció dels mètodes de filtratge i es generen fitxers de major mida.
* El PNG admet, com el GIF, imatges indexades amb transparència d'1 bit o “binaria”. Aquest tipus de transparència no requereix un canal addicional i únicament admet que un color de la paleta aparegui transparent al 100%.
* El PNG admet formats amb una profunditat de color de milions de colors (color vertader) i canal alfa, que proporcionen uns rangs de color molt més rics i precisos que el GIF i disposen de valors de transparència intermèdia. Lamentablement, això permet que es compari de forma errònia els PNG de color vertader com els GIF de color indexat (256 colors).
* GIF suporta animació i PNG no.

### Comparació amb JPG

PNG I JPEG són formats que estan dissenyats per funcions diferents, així que només se'n pot realitzar una comparació generalista:
* JPEG té una relació de compressió enorme en perjudici de la qualitat de la imatge, ideal per imatges de mida gran i fotografies. No admet transparència.
* PNG és un format sense pèrdua de qualitat amb un excel·lent compressió, ideal per imatges formades per grans àrees de color pla o amb poques variacions de color. Admet canal alfa i alguns atributs extra com la correcció gamma. Tot i així, no admet mode CMYK, així que no és del tot útil per dissenys d'impressió.

## PNG a la web

Tot i que les característiques tècniques i de compressió fan del PNG un format ideal per a substituir el GIF, la seva adopció ha estat molt lenta degut en part a comparacions errònies i a alguns desavantatges tècnics. No està suportat per alguns navegadors molt vells (tot i que aquests navegadors són molt poc comuns avui en dia).
* L'administració de color fallava en alguns navegadors (actualment no és molt important i es pot evitar).

## Falses creences

* “Internet Explorer 6 no suporta imatges PNG transparents”. S'hauria de matisar un punt. Internet Explorer 6 i inferiors admeten transparències binàries com al GIF, però fallen al mostrar imatges amb canal alfa. Això és degut al fet que el paquet que especifica el canal alfa és opcional (tRNS) segons l'especificació PNG, tot i així Internet Explorer 7 sí que els admet.
* “Les imatges en PNG pesen més que els GIF”- Altra vegada no és veritat. Aquesta falsa creença és deguda al fet que es compara amb PNGs mal codificats o de 32 bits amb GIFs de 256 colors.

## Problemes de colors

Algunes versions d'alguns navegadors web presenten els valors de correcció gamma inclús quan estan especificats en el PNG. Navegadors coneguts amb problemes de visualització PNG:
* Internet Explorer 5.5 i 6.
* Netscape 7.0 a 7.2.
* Opera (versions anteriors a la 7.50).
L'efecte final és que el color mostrat en el PNG no coincideix amb l'esquema de color de la resta de la pàgina web. Una forma senzilla d'evitar això és tornant a codificar el PNG truncant certs atributs. Algunes utilitats per a aquest fi: • PNGOUT és una utilitat gratuïta de DOS que utilitza un algoritme exclusiu per recomprimir un PNG i reduir la mida del fitxer al mínim, sense pèrdues. • Superpng, és un plugin gratuït per Photoshop que permet l'optimització de fitxers PNG. • OptiPNG és una utilitat gratuïta de DOS que recomprimeix un PNG, reduint la seva mida sense pèrdues.

## Referències

* ↑ «ISO/IEC 15948:2004 - Information technology -- Computer graphics and image processing -- Portable Network Graphics (PNG): Functional specification». [Consulta: 19 febrer 2011].
* ↑ «PNG (Portable Network Graphics) Home Site». [Consulta: 25 febrer 2025].
* ↑ «PNG - Terminologia de la fotografia digital | TERMCAT». [Consulta: 20 juliol 2024].
* ↑ «PNG Definition - What is a PNG file?». [Consulta: 20 juliol 2024].
* ↑ «What is a PNG (Portable Network Graphics)?» (en anglès). [Consulta: 20 juliol 2024].
* ↑ «Image file type and format guide - Web media technologies | MDN» (en anglès americà), 09-07-2024. [Consulta: 20 juliol 2024].
Viccionari