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 PNG et IHDR
| Offset | Hex | ASCII | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 89504E470D0A1A0A0000000D49484452 | .PNG........IHDR | |||||||||||||||
| 0010 | 00000100000001000802000000000000 | ............. | |||||||||||||||
Structure d’un bloc
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.
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.
XML:com.adobe.xmp\0eXIf : 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
Vérifier la signature
Contrôler la signature PNG : 89 50 4E 47 0D 0A 1A 0A
Analyser les blocs
Lire la longueur et le type de chaque bloc, puis valider son CRC
Filtrer les blocs de métadonnées
Repérer et ignorer les blocs tEXt, zTXt, iTXt, eXIf et tIME
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)