Il formato PNG (Portable Network Graphics, o formato Ping) è un formato di file grafico bitmap (raster). È stato elaborato nel 1995 per fornire un'alternativa libera al formato GIF, formato proprietario i cui diritti sono detenuti dalla società Unisys (proprietaria dell'algoritmo di compressione LZW), che obbliga ogni editore di software che manipola questo tipo di formato a versare loro delle royalty. Così PNG è anche un acronimo ricorrente per PNG's Not GIF.
Il formato PNG permette d'immagazzinare delle immagine in bianco e nero (fino a 16 bit per pixel di profondità di codifica, in True color, fino a 48 bit per pixel di profondità di codifica) nonché delle immagini indicizzate, che usano una paletta di 256 colori. Inoltre supporta la trasparenza per canale alpha, cioè la possibilità di definire 256 livelli di trasparenza, mentre il formato GIF permette di definire solamente un colore della paletta come trasparente. Esso possiede solitamente una funzione di intreccio che permette di visualizzare progressivamente l'immagine.
La compressione proposta con questo formato è una compressione senza perdita (lossless compression) dal 5 al 25% migliore della compressione GIF. Infine PNG imbarca delle informazioni sulla gamma dell'immagine, che rendono possibili una correzione gamma e permettono un'indipendenza rispetto alle periferiche di visualizzazione. Sono ugualmente imbarcati nel file dei meccanismi di correzione degli errori per garantirne l'integrità.
Un file PNG è costituito da una firma, che permette di segnalare che si tratta di un file PNG, poi da una serie di elementi detti chunks (in seguito utilizzeremo il termine segmenti). La firma di un file PNG (in notazione decimale) è la seguente: 137 80 78 71 13 10 26 10. La stessa firma in notazione esadecimale è 89 50 4E 47 0D 0A 1A 0A.
Ogni segmento (chunk) è composto da 4 parti:
La dimensione, un numero intero non marcato di 4 byte, che descrive la dimensione del segmento;
Il tipo di segmento (chunk type), un codice di 4 caratteri (4 byte) composti da caratteri ASCII alfanumerici (A-Z, a-z, 65 a 90 e 97 a 122) che permette di qualificare la natura del segmento;
I dati del segmento (chunk data)
Il CRC (cyclic redundancy check), un codice correttore di 4 byte che permette di verificare l'integrità del segmento.
I segmenti possono essere presenti in qualsiasi ordine ma devono cominciare dal segmento di titolo (IHDR chunk) e finire dal segmento finale (IEND chunk). I segmenti principali (detti critical chunks) sono: IHDR Image header; PLTE Palette; IDAT Image data; IEND Image trailer. Gli altri segmenti (detti </i>anciliary chunks</i>) sono: BKGD Background color; CHRM Primary chromaticities and white point; GAMA Image gamma; HIST Image histogram; PHYs Physical pixel dimensions; SBIT Significant bits; TEXt Textual data; TIME Image last-modification time; TRNS Transparency; ZTXt Compressed textual data.
Spefiche del formato PNG (versione 1.0);
Foto: © Pixabay.