Format TIFF
Tagged Image File Format
Structure de l’en-tête
TIFF est l’ancêtre des métadonnées d’image. Quand vous voyez des données EXIF dans un JPEG, il s’agit en réalité d’une structure TIFF intégrée au fichier. Comprendre TIFF, c’est comprendre le fonctionnement de la plupart des métadonnées d’image.
Le format commence par un en-tête de 8 octets qui livre deux informations essentielles : l’ordre des octets (Intel ou Motorola) et l’emplacement du premier IFD. Ensuite, tout n’est plus qu’une affaire de pointeurs à suivre.
Structure d’un fichier TIFF
En-tête TIFF
| Offset | Hex | ASCII | |||||||
|---|---|---|---|---|---|---|---|---|---|
| 0000 | 49492A0008000000 | II*..... | |||||||
Ordre des octets
49 49 (II)Intel : little-endian (octet de poids faible en premier)
4D 4D (MM)Motorola : big-endian (octet de poids fort en premier)
La structure des IFD
IFD signifie Image File Directory, mais voyez-y plutôt un sommaire. C’est une liste plate de tags, chacun pointant vers une donnée. L’astuce, c’est qu’un IFD peut pointer vers d’autres IFD, formant ainsi une arborescence.
Disposition d’un IFD
Structure d’une entrée de tag (12 octets)
Si la donnée tient dans 4 octets, elle est stockée directement dans le champ de valeur. Sinon, ce champ contient un offset pointant vers la donnée.
Types de tags
TIFF est fortement typé. Chaque tag précise non seulement ce qu’il contient, mais aussi la façon d’interpréter les octets. D’où la nécessité de bien connaître le système de types pour analyser correctement un TIFF.
| ID | Nom | Taille | Description |
|---|---|---|---|
| 1 | BYTE | 1 | Entier non signé sur 8 bits |
| 2 | ASCII | 1 | Chaîne terminée par un octet nul (8 bits) |
| 3 | SHORT | 2 | Entier non signé sur 16 bits |
| 4 | LONG | 4 | Entier non signé sur 32 bits |
| 5 | RATIONAL | 8 | Deux LONG : numérateur/dénominateur |
| 6 | SBYTE | 1 | Entier signé sur 8 bits |
| 7 | UNDEFINED | 1 | Octets bruts (données binaires) |
| 8 | SSHORT | 2 | Entier signé sur 16 bits |
| 9 | SLONG | 4 | Entier signé sur 32 bits |
| 10 | SRATIONAL | 8 | Deux SLONG : numérateur/dénominateur signés |
| 11 | FLOAT | 4 | Flottant IEEE 32 bits |
| 12 | DOUBLE | 8 | Flottant IEEE 64 bits |
| 13 | IFD | 4 | Pointeur vers un IFD imbriqué |
Règle de stockage des valeurs
Si taille × nombre ≤ 4 octets, la valeur est stockée directement dans le champ de valeur de 4 octets. Sinon, ce champ contient un offset indiquant où la donnée est stockée dans le fichier.
Calcul des offsets d’IFD
Le plus difficile, dans l’analyse d’un TIFF, c’est de suivre la chaîne des offsets. Tout est relatif au début du fichier, et vous allez beaucoup sauter d’un endroit à l’autre. Voici comment se fait le calcul :
IFD0_offset = bytes[4:8] // Depuis l’en-tête TIFF
next_IFD = IFD0_offset + 2 + (entry_count × 12) + 4
subIFD_offset = tag_value // Depuis le tag pointeur (0x8769, 0x8825)
Tags importants
Tags de données d’image (conservés)
0x0100 : ImageWidth0x0101 : ImageLength0x0102 : BitsPerSample0x0103 : Compression0x0111 : StripOffsets0x0117 : StripByteCountsTags de métadonnées (supprimés)
0x010F : Make (fabricant de l’appareil)0x0110 : Model (modèle de l’appareil)0x0132 : DateTime0x013B : Artist0x8298 : Copyright0x9003 : DateTimeOriginalTags pointeurs (sous-IFD)
0x8769 : ExifIFDPointer0x8825 : GPSInfoIFDPointer0xA005 : InteroperabilityIFDPointerLes sous-IFD
L’IFD principal (IFD0) contient souvent des « tags pointeurs » qui renvoient vers des sous-répertoires. C’est ainsi que les données EXIF, GPS et autres métadonnées sont regroupées par thème, tout en gardant l’IFD principal épuré.
Sous-IFD EXIF
Contient les métadonnées propres à l’appareil : exposition, ouverture, ISO, distance focale, flash, balance des blancs, etc.
Sous-IFD GPS
Contient les données de géolocalisation : latitude, longitude, altitude, horodatage, satellites, vitesse, direction. Risque majeur pour la vie privée.
Notes du fabricant
Données propriétaires de l’appareil. Le format varie d’un fabricant à l’autre. Peuvent contenir des numéros de série, la version du micrologiciel et des réglages personnalisés.
Comment PicScrub traite le TIFF
Analyser l’en-tête
Déterminer l’ordre des octets (II/MM) et localiser le premier IFD
Établir la liste blanche des tags
Repérer les tags indispensables au rendu de l’image
Filtrer les entrées d’IFD
Supprimer les tags de métadonnées et remettre à zéro les pointeurs de sous-IFD
Réécrire le fichier
Reconstruire le TIFF avec des IFD nettoyés et les données d’image recopiées
Recalcul des offsets
Les fichiers TIFF font un usage intensif des offsets. Lorsque des métadonnées sont supprimées, PicScrub doit recalculer tous les offsets pour préserver l’intégrité du fichier.