Portable Network Graphics







Page d'aide sur l'homonymie Pour les articles homonymes, voir PNG.


PNG
Portable Network Graphic.mw-parser-output .entete.informatique{background-image:url("//upload.wikimedia.org/wikipedia/commons/a/ae/Picto-infoboxinfo.png")}


PNG transparency demonstration 1.png

Une image PNG avec un fond transparent, sur un fond blanc














































Caractéristiques
Extension

.pngVoir et modifier les données sur Wikidata
Type MIME

image/pngVoir et modifier les données sur Wikidata
Signature

89 50 4E 47 0D 0A 1A 0A (hexa)Voir et modifier les données sur Wikidata
Développé par

W3C
Version initiale

1er octobre 1996Voir et modifier les données sur Wikidata
Type de format

format d’image matriciel sans perte
Norme

ISO 15948, W3C, IETF RFC 2083
ISO

15948Voir et modifier les données sur Wikidata
Spécification

Format ouvert
Sites web

www.libpng.org/pub/png
png-mng.sourceforge.net/pub/pngVoir et modifier les données sur Wikidata




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, Unisys, propriétaire de deux brevets sur des algorithmes utilisés par la compression sous GIF ayant réclamé des royalties. PNG a alors été défini mais en augmentant les capacités de GIF.




Sommaire






  • 1 Utilisation


    • 1.1 Pour les images synthétiques


    • 1.2 Pour les photos




  • 2 Détails sur le format


    • 2.1 La translucidité


    • 2.2 La transparence


    • 2.3 Autres comparaisons avec GIF




  • 3 Structure d'un fichier PNG


    • 3.1 Composition minimale d'un fichier PNG


    • 3.2 Signature PNG


    • 3.3 Nommage des chunks


    • 3.4 Composition d'un chunk


    • 3.5 Exemple d'un chunk (pour une image de 800x600)




  • 4 Compression des données


    • 4.1 En Programmation




  • 5 Voir aussi


    • 5.1 Articles connexes


    • 5.2 Liens externes







Utilisation |




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 |


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 |


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



Détails sur le format |


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



  • bit donc deux couleurs

  • 2 bits en 4 couleurs basiques

  • 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, mais zopfli peut également être utilisé avec des applications comme advpng.


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é |


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.



La transparence |


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 |


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 |



Composition minimale d'un fichier PNG |



  1. signature PNG - 8 octets

  2. chunk IHDR pour l'en-tête - 25 octets

  3. chunk IDAT pour les données - longueur variable

  4. chunk IEND pour la fin de fichier - 12 octets


Un chunk est un morceau ou un fragment d'information, ce terme anglais est utilisé dans de nombreux formats multimédias.


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 |


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ée en plusieurs parties de longueurs variables, appelées chunk.



Nommage des chunks |


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 (sans) ou 1 (avec Adam7)


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 |


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

LENGTH : 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, sinon c'est un chunk auxiliaire.


DATAS : Les informations relatives au chunk sur n octets (relatif à LENGTH).


CRC : 4 octets de contrôle généré en utilisant l'algorithme suivant :



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 leur 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 fonction

Une fois tout le chunk parcouru, la valeur renvoyée par le dernier appel de maj_crc() n'est pas celle du crc. il faut encore inverser la valeur de chaque bit :



fonction validation_crc((entier positif 4 octets) crc)
retourner (crc xb 0xffffffff)
fin fonction

La liste table_crc() se trouvant dans maj_crc() est constituée de valeurs arbitraires mais calculables. certaines implémentations listent ces valeurs (alors calculées à l'avance) et les stockent directement dans la variable tandis que d'autres contiennent l'algorithme (généralement une fonction) permettant de les calculer :



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 296 488 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 fonction


Exemple d'un chunk (pour une image de 800x600) |


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 filtrage - (0x00)

    • 0 - Méthode d'entrelacement - (0x00)

    • 353637671 - CRC - (0x15, 0x14, 0x15, 0x27)





Compression des données |


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 |


La compression peut être effectuée grâce à la bibliothèque zlib (C/C++). Il est aussi possible de générer le CRC grâce à cette bibliothèque.



Voir aussi |



Articles connexes |



  • Format ouvert

  • Image numérique

  • Image matricielle


Autres formats :



  • GIF

  • JPEG

  • WebP

  • TIFF

  • BMP

  • APNG

  • JNG

  • MNG



Liens externes |




  • (fr) La page francophone du format PNG


  • (en) Page du PNG - Sur le W3C


  • (en) Page officielle du format PNG


  • (fr) Page d’explication de Microsoft - Sur comment utiliser le PNG dans un site pour qu’il soit lu par Internet Explorer




  • Portail de l’imagerie numérique Portail de l’imagerie numérique
  • Portail d’Internet Portail d’Internet



Popular posts from this blog

What visual should I use to simply compare current year value vs last year in Power BI desktop

How to ignore python UserWarning in pytest?

Alexandru Averescu