PicScrub logoPicScrub
Retour aux formats

Format PNG

Portable Network Graphics

Une structure en blocs

PNG possède l’un des formats de fichier les plus propres qui soient. Tout y est organisé en « chunks » (blocs) : des unités autonomes dotées d’un type, de données et d’une somme de contrôle. L’élégance du procédé, c’est que les décodeurs peuvent ignorer les blocs qu’ils ne comprennent pas : c’est ainsi que PNG accepte des métadonnées sans casser les logiciels plus anciens.

L’astuce se cache dans le nom des blocs : si la première lettre est une majuscule, le bloc est « critique » (l’image ne s’affiche pas sans lui). Une minuscule signifie « auxiliaire » : utile, mais pas indispensable. Tous les blocs de métadonnées qui nous intéressent sont auxiliaires, d’où la possibilité de les supprimer sans risque.

Structure d’un fichier PNG

Signature
IHDR
Metadata
IDAT
IEND
Signature
8 octets
89 50 4E 47 0D 0A 1A 0A
IHDR
25 octets
En-tête d’image (obligatoire)
Metadata
100 octets
Blocs tEXt, iTXt, eXIf
IDAT
Longueur variable
Données d’image compressées
IEND
12 octets
Marqueur de fin d’image

Signature PNG et IHDR

Signature PNG
Longueur IHDR (13)
Type IHDR
Largeur (256)
Hauteur (256)
Profondeur de bits, type de couleur, etc.
OffsetHexASCII
0000
89504E470D0A1A0A0000000D49484452
.PNG........IHDR
0010
00000100000001000802000000000000
.............

Structure d’un bloc

LongueurTypeDonnéesCRC32
4 octets4 octetsVariable4 octets

Convention de nommage des blocs

  • • Première lettre en majuscule = bloc critique (doit être compris)
  • • Première lettre en minuscule = bloc auxiliaire (optionnel, peut être ignoré)
  • • Deuxième lettre = public (majuscule) ou privé (minuscule)

Blocs critiques

Ces blocs doivent être présents et compris pour que l’image soit valide. PicScrub conserve toujours les blocs critiques.

IHDR : en-tête d’image

Premier bloc après la signature. Contient la largeur, la hauteur, la profondeur de bits, le type de couleur, la méthode de compression, la méthode de filtrage et la méthode d’entrelacement. Exactement 13 octets de données.

IDAT : données d’image

Contient les données d’image compressées (zlib/deflate). Elles peuvent être réparties sur plusieurs blocs IDAT, qui doivent alors se suivre sans interruption.

IEND : fin d’image

Marque la fin du flux PNG. Doit être le dernier bloc. Ne contient aucun octet de données.

PLTE : palette

Obligatoire pour les images en couleurs indexées (type de couleur 3). Contient de 1 à 256 entrées de palette RVB.

Blocs de métadonnées

Des blocs auxiliaires susceptibles de contenir des métadonnées sensibles. Ce sont ceux que PicScrub supprime.

tEXt : texte non compressé

Paires clé-valeur encodées en Latin-1. Clés courantes : Author, Description, Copyright, Creation Time, Software.

Format : mot-clé + octet nul + texte

zTXt : texte compressé

Identique à tEXt, mais compressé avec zlib. Utilisé pour les contenus textuels plus longs.

iTXt : texte international

Texte UTF-8, compressé ou non. Prend en charge les étiquettes de langue et les mots-clés traduits. Utilisé pour les métadonnées XMP.

Mot-clé XMP : XML:com.adobe.xmp\0

eXIf : données EXIF

Enregistré comme extension PNG en 2017. Contient des données EXIF brutes au format TIFF, avec la même structure que dans un JPEG. Peut contenir des données GPS, des horodatages et des infos sur l’appareil.

iCCP : profil colorimétrique ICC

Profil colorimétrique ICC intégré, compressé avec zlib. PicScrub le conserve par défaut pour la fidélité des couleurs.

tIME : date de dernière modification

Sept octets : année (2), mois, jour, heure, minute, seconde. Révèle la date de dernière modification de l’image.

Blocs liés à la couleur

Ces blocs influencent le rendu des couleurs mais ne contiennent généralement aucune information personnelle. PicScrub les conserve par défaut.

sRGB

Indique l’espace colorimétrique sRGB. Un seul octet pour l’intention de rendu.

gAMA

Valeur de gamma, entier non signé de 4 octets (multipliée par 100 000).

cHRM

Chromaticités primaires et coordonnées du point blanc.

sBIT

Profondeur de bits d’origine de chaque canal.

Vérification CRC32

Chaque bloc PNG contient une somme de contrôle CRC32 calculée sur le type et les données du bloc, ce qui garantit l’intégrité des données.

Calcul du CRC

Entrée CRC32 = chunk_type (4 octets) + chunk_data (N octets)
Sortie CRC32 = 4 octets ajoutés après les données du bloc

// PNG utilise le polynôme CRC-32 : 0xEDB88320

Pourquoi PicScrub vérifie le CRC

À la lecture d’un fichier PNG, PicScrub contrôle le CRC de chaque bloc pour s’assurer de l’intégrité des données. Les blocs corrompus sont traités sans faire échouer l’opération.

Comment PicScrub traite le PNG

1

Vérifier la signature

Contrôler la signature PNG : 89 50 4E 47 0D 0A 1A 0A

2

Analyser les blocs

Lire la longueur et le type de chaque bloc, puis valider son CRC

3

Filtrer les blocs de métadonnées

Repérer et ignorer les blocs tEXt, zTXt, iTXt, eXIf et tIME

4

Reconstruire le fichier

Écrire la signature, les blocs conservés, puis IEND

Blocs conservés

  • • IHDR, PLTE, IDAT, IEND (critiques)
  • • sRGB, gAMA, cHRM (couleur)
  • • iCCP (profil colorimétrique, optionnel)
  • • pHYs (dimensions physiques des pixels)
  • • tRNS (transparence)

Blocs supprimés

  • • tEXt (métadonnées textuelles)
  • • zTXt (texte compressé)
  • • iTXt (texte international, XMP)
  • • eXIf (données EXIF)
  • • tIME (date de modification)