Il formato PNG (Portable Network Graphics, o formato Ping) è un formato di file grafico bitmap (raster). Esso è stato messo a punto 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 royalties. Così PNG è anche un acronimo ricorrente per PNG's Not Gif.
Il formato PNG permette di stoccare delle immagine in bianco e nero (fino a 16 bit per pixel di profondità di codifica), inTrue 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 strato 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) da 5 a 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 erroriper garantirne l'integrità.
Un file PNG è costituito da una fima, che permette di segnalare che si tratta di un file PNG, poi da una serie di elementi dettichunks (in seguito utilizzeremo il termine "segmenti"). La firma di un file PNG (in nota decimale) è la seguente :
137 80 78 71 13 10 26 10La stessa firma in nota esadecimale è :
89 50 4E 47 0D 0A 1A 0A
Ogni segmento (chunk) è composto da 4 parti :
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 :
Gli altri segmenti (detti anciliary chunks) sono i seguenti :