Qu’est-ce que JFIF ?
JFIF est une convention d’échange qui place des données d’image compressées en JPEG dans une structure de fichier définie. Elle précise notamment l’alignement des composantes, l’interprétation des couleurs, la densité de pixels et le rapport d’aspect.
Fonctionnement de JFIF
JFIF ajoute un petit ensemble fixe de conventions à un flux JPEG afin que des décodeurs indépendants l’interprètent de la même manière. Son segment d’en-tête APP0, obligatoire immédiatement après le marqueur de début d’image, enregistre une version, une densité de pixels en points par pouce ou par centimètre (ou, lorsque les unités sont définies sur 0, uniquement un rapport d’aspect des pixels), ainsi qu’une vignette facultative. La spécification impose aussi une interprétation des couleurs en niveaux de gris ou en YCbCr sur toute la plage, un ordre des échantillons de haut en bas et la position des échantillons de chrominance sous-échantillonnés par rapport à la luminance. Le fichier reste un flux JPEG fondé sur des marqueurs, et non un conteneur à boîtes, et d’autres segments d’application, comme un profil ICC dans APP2, peuvent suivre l’en-tête JFIF. La version 1.02 de l’année 1992 a ensuite été normalisée sous les références ITU-T T.871 et ISO/IEC 10918-5.
Points clés
- Identifiez JFIF à partir des octets, et non du suffixe : le fichier commence par SOI (
FF D8), immédiatement suivi d’un segment APP0 (FF E0, puis une longueur sur deux octets) dont les données commencent par la chaîne terminée par un octet nulJFIF(4A 46 49 46 00). Un JPEG dont le premier segment est différent, comme APP1 pour Exif, n’est pas un fichier JFIF conforme, même s’il porte le nom.jpgou.jfif. La correspondance avec cette signature indique seulement qu’un fichier se déclare JFIF : la conformité exige aussi un flux d’échange JPEG valide et le respect des contraintes sur l’en-tête et l’image de la clause10.1de T.871, notamment des valeurs de densité non nulles et une ou trois composantes avec les identifiants 1, 2 et 3 pour Y, Cb et Cr. - JFIF ne couvre que les images à un ou trois canaux de 8 bits chacun : Y en niveaux de gris, ou YCbCr fondé sur BT.601 et mis à l’échelle sur toute la plage 0–255. Les JPEG CMYK et ceux codés en RGB n’en font pas partie et sont signalés par d’autres conventions, comme le marqueur APP14 d’Adobe. La norme elle-même indique que cela n’offre qu’une fidélité des couleurs élémentaire et qu’un profil ICC peut être nécessaire pour des couleurs plus précises.
- JFIF et Exif exigent chacun leur propre segment immédiatement après SOI (APP0 pour JFIF, APP1 pour Exif) ; un même fichier ne peut donc pas être strictement conforme aux deux. Les logiciels d’écriture les combinent néanmoins, par exemple en écrivant d’abord APP0 pour JFIF, puis APP1 pour Exif ; cet ordre respecte la règle de placement de JFIF, mais pas celle d’Exif. Un analyseur devrait donc parcourir chaque segment d’application et vérifier sa chaîne d’identification plutôt que de présumer une organisation unique des métadonnées.
- Un en-tête JFIF peut intégrer une vignette RGB non compressée sur 24 bits, et la version 1.02 ajoute des segments d’extension
JFXXpour les vignettes codées en JPEG, à palette ou RGB. Exif définit son propre mécanisme distinct de vignettes ; un flux de travail qui doit trouver ou supprimer les aperçus intégrés doit donc aussi l’examiner. Ce ne sont pas les seuls emplacements possibles d’un aperçu : les blocs de ressources d’image de Photoshop, par exemple, peuvent contenir une autre vignette.
Quand JFIF est utile
Les analyseurs peuvent rencontrer JFIF dans des fichiers .jpg ordinaires comme dans des fichiers portant l’extension .jfif. Les logiciels doivent aussi tenir compte de conventions de métadonnées comme Exif, qui ne sont pas entièrement compatibles avec JFIF.
Références
- Format d’échange de fichiers JPEG, version 1.02 (Hamilton, 1992)
- Rec. ITU-T T.871 (05/2011) : format d’échange de fichiers JPEG (JFIF)
- Bibliothèque du Congrès : fichier encodé en JPEG avec métadonnées Exif, y compris la note sur le conflit avec JFIF
- libjpeg-turbo : utilisation de la bibliothèque JPEG de l’IJG, « Espaces colorimétriques spéciaux » et « Marqueurs spéciaux »
- Spécification des formats de fichiers Adobe Photoshop, « Blocs de ressources d’image » et « Format des ressources de vignettes »