Portable Network Graphics

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Page d'aide sur l'homonymie Pour les articles homonymes, voir PNG.
Portable Network Graphic
Extension .png
Type MIME image/png
Développé par W3C
Type de format format d’image matriciel sans perte
Standard(s) ISO 15948, W3C, IETF RFC 2083
Spécification Format ouvert

Le Portable Network Graphics (PNG) est un format ouvert d’images numériques, qui a été créé pour remplacer le format GIF, à l’époque propriétaire et dont la compression était soumise à un brevet. Le PNG est un format sans perte spécialement adapté pour publier des images simples comprenant des aplats de couleurs.

Il a été normalisé par l’ISO (ISO/CEI 15948:2004).

PNG est une spécification pour Internet et l’objet d’une Recommandation W3C et d’une RFC. Il a été créé pour contourner la licence existante sur le format GIF, le plus en vogue à la fin des années 1990, CompuServe refusant de laisser utiliser son format gratuitement. PNG a alors été défini mais en augmentant les capacités de GIF.

Utilisation[modifier | modifier le code]

Une image PNG avec un fond transparent, sur un fond blanc.
La même image sur un fond en damier permet d’observer la transparence.

Pour les images synthétiques[modifier | modifier le code]

PNG est particulièrement approprié lorsqu’il s’agit d’enregistrer des images synthétiques destinées au Web comme des graphiques, des icônes, des images représentant du texte (bonne conservation de la lisibilité), ou des images avec des dégradés. Le PNG surpasse régulièrement le format GIF en ce qui concerne la réduction de la taille des fichiers (avec une palette de couleurs bien choisie) ou la qualité (puisqu’il n’est pas limité à 256 couleurs).

Pour les photos[modifier | modifier le code]

Les caractéristiques de PNG lui permettent d’enregistrer des photographies sans perte de données, mais au détriment de la taille du fichier qui reste la plupart du temps très supérieure à celle de formats spécifiques aux photographies comme JPEG (ou JPEG 2000).

Détails sur le format[modifier | modifier le code]

PNG permet principalement d’enregistrer les images matricielles sous différents formats :

  • bit donc deux couleurs
  • 2 bits pour les images en quadrichromie
  • 4 bits permettant de choisir parmi une palette de maximum 16 couleurs contenues dans le fichier
  • 8 bits en niveaux de gris (256 niveaux)
  • 8 bits permettant de choisir parmi une palette de maximum 256 couleurs par canal contenues dans le fichier (équivalent au format GIF)
  • 24 bits en 16 777 216 (couleurs vraies)
  • 32 bits, soit 232 ou 4 294 967 296 couleurs.
  • 48 bits, soit 248 ou 281 474 976 710 656 couleurs.
Voir l’article Image numérique pour l’explication de ces notions.

Après l’application d’un filtre prédictif qui permet généralement d’obtenir de plus hauts niveaux de compression, le tout est compressé sans pertes suivant l’algorithme deflate (RFC 1951), généralement avec zlib.

Les composantes des pixels ou les entrées de palette sont données soit au format RVB (rouge, vert, bleu), soit au format RVBA (avec un canal alpha supplémentaire pour la translucidité). Dans ce cas, 8 ou 16 bits supplémentaires sont utilisés par pixel ou par entrée de palette, ce qui fait 16 bits pour une image en niveaux de gris, 32 bits pour une image en couleurs vraies et 64 bits pour une image en 4 canaux de 16 bits chacun.

La translucidité[modifier | modifier le code]

La présence d’un canal alpha définissant différents niveaux de transparence le rend idéal pour la composition sur les pages web. Cette caractéristique est bien implémentée par la majorité des navigateurs web actuels. Internet Explorer 7 et supérieurs gèrent correctement le canal alpha.

La transparence[modifier | modifier le code]

Lorsque l’image PNG utilise une palette de 256 couleurs maximum, il est possible d’utiliser une des couleurs pour la transparence.

C’est le même comportement qu’avec le format GIF et cela fonctionne même avec Internet Explorer 6. Par conséquent, les images Web au format GIF peuvent être converties en cette version de PNG sans crainte d’incompatibilité avec la majorité des navigateurs web actuels (premier trimestre 2006), et sans souci de brevet (le brevet GIF est tombé en 2006 dans le domaine public).

Autres comparaisons avec GIF[modifier | modifier le code]

Le PNG, d’ailleurs parfois appelé par récursivité PNG’s Not GIF (PNG n’est pas GIF), peut faire tout ce que le format GIF peut faire et même plus, comme la translucidité. Il n’a cependant pas été prévu pour faire des images animées, mais le format dérivé MNG a été créé par ses auteurs à cet effet (voir également le format APNG).

Les deux formats peuvent être entrelacés, mais PNG utilise l'algorithme Adam7 tandis que GIF affiche dans ce cas l'image ligne par ligne.

Structure d'un fichier PNG[modifier | modifier le code]

Composition minimale d'un fichier PNG[modifier | modifier le code]

  1. Signature PNG - 8 octets
  1. chunk IHDR pour l'en-tête - 25 octets
  2. 1 chunk IDAT pour les données - longueur variable
  3. chunk IEND pour la fin de fichier - 12 octets

Un fichier peut contenir plusieurs chunks de données IDAT ainsi qu'un chunk PLTE pour la palette à utiliser s'il s'agit d'une image dont les couleurs sont indexées. Un fichier peut également contenir d'autres chunks secondaires, dont des informations textuelles.

Signature PNG[modifier | modifier le code]

Un fichier PNG commence par une signature de 8 octets représenté par les valeurs décimales suivantes: 137 80 78 71 13 10 26 10, ou en hexadécimal: 89 50 4E 47 0D 0A 1A 0A.

La suite du fichier est décomposé en plusieurs parties de longueurs variables, appelées chunk.

Nommage des chunks[modifier | modifier le code]

Il existe 18 chunks officiels, dont 4 principaux et 14 secondaires.

La casse est importante dans les nom des chunks.

Voici un tableau regroupant les chunks les plus utilisés.

Nom Description Contient Importance Occurrence
IHDR En-tête du fichier
  • Largeur de l'image en pixels
  • Hauteur de l'image en pixels
  • Profondeur de bits (1, 2, 4, 8 ou 16)
  • Type de couleur (0, 2, 3, 4, ou 6)
  • Méthode de compression (0)
  • Méthode de filtrage (0)
  • Méthode d'entrelacement (0 ou
Obligatoire Après la signature PNG
PLTE Palette de l'image Table des couleurs Facultatif Entre IHDR et le 1er chunk IDAT
IDAT Bloc de données Données de l'image Obligatoire Entre IHDR ou PLTE et IEND
IEND Fin du fichier néant Obligatoire En dernier
tIME Timestamp
Facultatif N'importe où
iTXt Info textuelle internationale (peut-être compressée zlib)
Facultatif N'importe où
tEXt Info textuelle non-compressée
Facultatif N'importe où
zTXt Info textuelle compressée (zlib)
Facultatif N'importe où

Composition d'un chunk[modifier | modifier le code]

Un chunk se décompose en 4 parties:

LENGTH TYPE DATAS CRC
Longueur des données Type de chunk Données dont la longueur en octets est spécifiée dans LENGTH Contrôle
4 octets 4 octets n octets 4 octets

LENGHT : La taille en octets du chunk, seulement ses datas. On ne prend pas en compte la taille, le type, ni le CRC.

TYPE : Le nom du chunk (ex : "IHDR", "IDAT", "IEND", ...). Si la première lettre est en majuscule il s'agit d'un chunk critique. Si non d'un chunk auxiliaire.

DATAS : Les informations relative au chunk sur n octets (relatif à LENGHT).

CRC : 4 octets de contrôle généré par l'algorithme suivant : x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. x étant la position du bit de poids faible.

Exemple d'un chunk (pour une image de 800x600)[modifier | modifier le code]

IHDR :

  • Hexadécimal : 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x03, 0x20, 0x00, 0x00, 0x02, 0x58, 0x10, 0x06, 0x00, 0x00, 0x00, 0x15, 0x14, 0x15, 0x27.
  • Compréhensible : 13 - Taille - (0x00, 0x00, 0x00, 0x0D), IHDR - Types/Nom - (0x49, 0x48, 0x44, 0x52), 800 - Largeur - (0x00, 0x00, 0x03, 0x20), 600 - Hauteur - (0x00, 0x00, 0x02, 0x58), 16 - Profondeur de bits - (0x10), 6 - Type de Couleur - (0x06), 0 - Méthode de compression - (0x00), 0 - Méthode de filttrage - (0x00), 0 - Méthode d'entrelacement - (0x00), 353637671 - CRC - (0x15, 0x14, 0x15, 0x27)

Compression des données[modifier | modifier le code]

La méthode de compression 0 spécifiée dans IHDR (la seule possible au format PNG) fait référence à la compression Deflate/Inflate. La compression se fait sur les datas du chunk IDAT uniquement.

En Programmation[modifier | modifier le code]

La compression peut être éffectué grace à la librairie zlib (C/C++). (Il est aussi possible de générer le CRC grace à cette librairie).

Voir aussi[modifier | modifier le code]

Articles connexes[modifier | modifier le code]

Autres formats :

Liens externes[modifier | modifier le code]