La norme JPEG est une norme qui définit le format d'enregistrement et l'algorithme de décodage pour une représentation numérique compressée d'une image fixe.
JPEG est l’acronyme de Joint Photographic Experts Group. C’est un comité d’experts qui édite des normes de compression pour l’image fixe. La norme communément appelée JPEG, de son vrai nom ISO/IEC IS 10918-1 | ITU-T Recommendation T.81, est le résultat de l’évolution des travaux qui ont débuté dans les années 1978 à 1980 avec les premiers essais en laboratoire de compression d’images.
Le groupe JPEG qui a réuni une trentaine d’experts internationaux, a spécifié la norme en 1991. Mais la norme officielle et définitive n'a été adoptée qu'en 1992. Pratiquement, seule la partie concernant le codage arithmétique est brevetée, et par conséquent protégée par IBM, son concepteur.
JPEG normalise uniquement l’algorithme et le format de décodage. Le processus d'encodage est laissé libre à la compétition des industriels et universitaires, du moment que l’image produite est décodable par un décodeur standard. La norme propose un jeu de fichiers de tests appelés fichiers de conformance qui permettent de vérifier qu'un décodeur respecte bien la norme. Un décodeur est alors dit conforme s’il est capable de décoder tous les fichiers de conformance.
Le brevet de la norme JPEG a été déposé par l'entreprise Forgent, mais il a été remis en cause par le bureau américain des brevets (USPTO), qui l'a invalidé le 24 mai 2006 pour antériorité existante à la suite d'une plainte de la Public Patent Foundation qui considère ce brevet invalide. Mais depuis le 27 septembre 2007, la société Global Patent Holdings, filiale d'Acacia Research Corporation, a à son tour revendiqué la paternité de ce format.
JPEG définit deux classes de processus de compression :
JPEG peut désigner soit l'encodage d'une image, soit le format de fichier. En effet, différents formats de fichiers (TIFF, PDF, JPG, ...) peuvent contenir une image encodée en JPEG. On parlera dans ce paragraphe du format de fichier (aussi appelé JIFF pour JPEG image file format). Un fichier JPEG est constitué d'une séquence de segments commençant par un marqueur. Un marqueur se compose de la valeur 0xFF suivie d'un octet identifiant le type de marqueur. Certains marqueurs ne contiennent que ces deux octets; d'autres sont suivis de deux octets spécifiant la taille en octets des données du segment. Cette taille inclue ces deux octets de taille mais pas ceux du marqueur.
Abréviation | Valeur | Contenu | Nom | Commentaires |
---|---|---|---|---|
SOI | 0xFFD8 | aucun | Start Of Image | Premiers octets du fichier |
SOF0 | 0xFFC0 | taille variable | Start Of Frame (Baseline DCT) | Indique une image encodée par "baseline DCT", et spécifie la largeur, la hauteur, le nombre de composantes et le sous-échantillonnage des composantes (par exemple 4:2:0). |
SOF2 | 0xFFC2 | taille variable | Start Of Frame (Progressive DCT) | Indique une image encodée par "progressive DCT", et spécifie la largeur, la hauteur, le nombre de composantes et le sous-échantillonnage des composantes (par exemple 4:2:0). |
DHT | 0xFFC4 | taille variable | Define Huffman Table(s) | Spécifie une ou plusieurs tables d'Huffman. |
DQT | 0xFFDB | taille variable | Define Quantization Table(s) | Spécifie une ou plusieurs tables de quantification. |
DRI | 0xFFDD | deux octets | Define Restart Interval | Spécifie l'intervalle entre les marqueurs RSTn, en macroblocs. Ce marqueur est suivi de deux octets indiquant sa taille de sorte qu'il puisse être traité comme n'importe quel segment de taille variable. |
SOS | 0xFFDA | taille variable | Start Of Scan | Commence un parcours de haut en bas de l'image. Dans les encodages baseline DCT, il n'y a généralement qu'un seul parcours. Les images progressive DCT contiennent habituellement plusieurs parcours. Ce marqueur spécifie quelle tranche de données il contient et il est immédiatement suivi par des données codées entropiquement. |
RSTn | 0xFFD0 … 0xFFD7 | aucun | Restart | Inséré tous les r macroblocs, où r est l'intervalle DRI (cf marqueur DRI). Il n'est pas utilisé s'il n'y a pas de marqueur DRI. Les trois bits de poids faible du code de marqueur varient en boucle de 0 à 7. |
APPn | 0xFFEn | taille variable | Application-specific | Ce marqueur permet d'inclure des informations qu'un programme de visualisation peut ignorer tout en restant capable de décoder l'image. Par exemple, un fichier JPEG Exif utilise un marqueur APP1 pour enregistrer des méta données, organisées selon une structure proche du formatage TIFF. |
COM | 0xFFFE | taille variable | Commentaire | Contient un commentaire textuel. |
EOI | 0xFFD9 | aucun | End Of Image | Derniers octets du fichier |