Section courante

A propos

Section administrative du site

Fiche technique
Type Bitmap
Méthode de compression JPEG
Nombre de couleurs 24 bits
Taille maximum de l'image 65536 x 65536 pixels
Supporte plusieurs images Non, une seule image dans un même fichier
Format des nombres Big-endian
Date de conception 1992
Auteur C-Cube Microsystems
Plateforme Windows, Mac OS X, Linux, OS/2,...

Introduction

L'extension «.JPG» ou «.JPEG», tirant son nom de l'anglicisme «Joint Photographic Experts Group», est un format très complexe à manipuler. La raison en est que les graphiques Bitmap avec suffisamment de résolution et de profondeur de couleur pour être intéressants prennent beaucoup de place. Les Bitmaps en vraies couleurs, étant les images les plus attrayantes, tout bien considéré, peuvent occuper d'énormes quantités d'espace sans avoir traité. Même les algorithmes de compression cosmiquement sournois, tels que celui utilisé par les fichiers PNG, font rarement une entaille significative dans les images complexes en vraies couleurs numérisées. Le problème avec la compression d'images en vraies couleurs numérisées est que ces images ressemblent beaucoup à la réalité, et la réalité est analogique. Une vue numérisée d'une réalité analogique incarne fréquemment des lignes de pixels dans lesquelles chaque pixel est juste un peu différent de son voisin. Comme les algorithmes de compression d'image fonctionnent en fin de compte en recherchant des données redondantes, ces variations mineures de la couleur des pixels sont suffisantes pour empêcher ces images d'être compressées efficacement. Dans les applications d'imagerie haut de gamme, d'énormes fichiers d'images en vraies couleurs à haute résolution sont une partie incontournable du schéma cosmique des choses, car ces applications nécessitent tous les détails qu'ils peuvent rassembler. Dans de nombreux cas, cependant, il serait pratique d'avoir les capacités de couleur d'une image en vraies couleurs, même si ce niveau de résolution de détail n'est pas vraiment nécessaire.

Les graphiques avec moins de détails se compressent plus facilement. Une façon d'aller au-delà de ce que permettent les techniques de compression conventionnelles serait alors de créer un algorithme éliminant sélectivement une quantité prédéterminée de détails d'image, puis compresserait les détails résultants aussi efficacement que possible. C'est essentiellement ce que fait un fichier JPEG. Étonnamment, en particulier pour les images à résolution modérée, vous pouvez généralement éliminer une quantité importante de détails avant que l'image en question ne soit nettement plus mauvaise pour l'expérience utilisateur. Cependant, l'un des inconvénients potentiels de l'utilisation du JPEG est que le point où les choses commencent à sembler inacceptablement moches varie entre les images et, dans une certaine mesure, entre les personnes les regardant. La compression d'images dans des fichiers JPEG est, dans une certaine mesure, subjective. Il convient également de noter que le JPEG fonctionne bien sur les images photoréalistes - il peut supprimer suffisamment de détails dans les photographies numérisées pour atteindre un niveau de compression respectable sans aggraver sensiblement l'image. Il se comporte beaucoup moins bien lorsqu'il est présenté avec des dessins au trait tels que du texte. Même une légère réduction du niveau de détail d'une image au trait entreposée dans un fichier JPEG entraînera généralement une dégradation notable de la qualité de l'image.

Lors de l'emballage d'une image JPEG, l'écriture JPEG sera configuré avec un facteur de qualité compris entre 1 et 100. À un facteur de qualité de 1, une écriture JPEG supprimera presque tous les détails d'un graphique et rédigera une image tellement flou qu'elle ne correspondra plus à l'image source. Avec un facteur de qualité de 100, une écriture JPEG ne compressera presque pas. Les valeurs intermédiaires représentent un compromis entre ces extrêmes - un facteur de qualité de 75 est généralement un bon point de départ lorsque vous écrivez des fichiers JPEG de résolution modeste. Il y a quelques points importants à garder à l'esprit concernant le facteur de qualité d'un fichier JPEG. Pour commencer, il semble qu'un facteur de qualité de 100 devrait entreposer des images JPEG sans aucune perte de détails; c'est-à-dire que ce qui est entré dans un fichier JPEG serait identique à ce qui est sorti lorsque le fichier a été lu. Ce serait bien si c'était le cas, mais ce n'est pas le cas. Même avec un facteur de qualité de 100, les fichiers JPEG modifient les images qu'ils entreposent dans une moindre mesure. Deuxièmement, la valeur du facteur de qualité n'est pas une mesure absolue de quoi que ce soit - elle ne représente pas, par exemple, le pourcentage de détails perdus dans la compression JPEG ou le taux de compression absolu pour le fichier final. Ce n'est qu'un indicateur relatif de la quantité de détails qu'une écriture JPEG supprimera. Vous devez également garder à l'esprit que les pertes de détails dans un fichier JPEG sont cumulatives. Cela signifie que si vous écrivez une image dans un fichier JPEG, la relisez et la réécrivez, le deuxième fichier aura perdu deux fois plus de détails que le premier, en utilisant des fichiers JPEG pour créer des images compactes à télécharger ou à utiliser sur les pages Web, vous devez effectuer toutes vos manipulations d'images dans un autre format - tel que BMP, Targa ou PNG - et n'écrire vos images en JPEG que comme étape finale du processus. Ainsi, pour être vraiment précis et technique avec une image, le format JPEG n'est pas vraiment un format de fichier graphique mais doit être plutôt perçu comme un algorithme de compression.

Structure du fichier

Il est basé sur le principe d'une balise commençant toujours par un marqueur. Voici la liste des marqueurs les plus communes :

Valeur Marqueur Nom du marqueur Description
FF01h TEM Temporary Ce marqueur permet d'indiquer une utilisation temporaire privé pour un encodage arithmétique
FF02h RES Reserved Ce marqueur est réservé
FFC0h SOF0 Start of Frame 0 Ce marqueur permet d'indiquer les lignes de base «DCT»
FFC1h SOF1 Start of Frame 1 Ce marqueur permet d'indiquer les extension séquentiel «DCT»
FFC2h SOF2 Start of Frame 2 Ce marqueur permet d'indiquer un «DCT» progressif
FFC3h SOF3 Start of Frame 3 Ce marqueur permet d'indiquer un «Lossless» séquentiel
FFC4h DHT Define Huffman Table Ce marqueur permet d'indiquer une table de définition «Huffman».
FFC5h SOF5 Start of Frame 5 Ce marqueur permet d'indiquer un différentiel «DCT» séquentiel
FFC6h SOF6 Start of Frame 6 Ce marqueur permet d'indiquer un différentiel «DCT» progressif
FFC7h SOF7 Start of Frame 7 Ce marqueur permet d'indiquer un différentiel «lossless» séquentiel
FFC8h JPG JPEG Extensions Ce marqueur permet d'indiquer des extensions «JPEG».
FFC9h SOF9 Start of Frame 9 Ce marqueur permet d'indiquer l'extension «DCT» séquentiel, encodage arithmétique
FFCAh SOF10 Start of Frame 10 Ce marqueur permet d'effectuer un «DCT» progressif, encodage arithmétique
FFCBh SOF11 Start of Frame 11 Ce marqueur permet d'effectuer un «Lossless» séquentiel, encodage arithmétique
FFCCh DAC Define Arithmetic Coding Ce marqueur permet d'indiquer un encodage arithmétique
FFCDh SOF13 Start of Frame 13 Ce marqueur permet d'indiquer un différentiel «DCT» séquentiel, encodage arithmétique
FFCEh SOF14 Start of Frame 14 Ce marqueur permet d'indiquer un différentiel «DCT» progressif, encodage arithmétique
FFCFh SOF15 Start of Frame 15 Ce marqueur permet d'indiquer un différentiel «lossless» séquentiel, encodage arithmétique
FFD0h RST0 Restart Marker 0 Ce marqueur permet d'indiquer un redémarrage de marqueur numéro 0
FFD1h RST1 Restart Marker 1 Ce marqueur permet d'indiquer un redémarrage de marqueur numéro 1
FFD2h RST2 Restart Marker 2 Ce marqueur permet d'indiquer un redémarrage de marqueur numéro 2
FFD3h RST3 Restart Marker 3 Ce marqueur permet d'indiquer un redémarrage de marqueur numéro 3
FFD4h RST4 Restart Marker 4 Ce marqueur permet d'indiquer un redémarrage de marqueur numéro 4
FFD5h RST5 Restart Marker 5 Ce marqueur permet d'indiquer un redémarrage de marqueur numéro 5
FFD6h RST6 Restart Marker 6 Ce marqueur permet d'indiquer un redémarrage de marqueur numéro 6
FFD7h RST7 Restart Marker 7 Ce marqueur permet d'indiquer un redémarrage de marqueur numéro 7
FFD8h SOI Start of Image Ce marqueur permet d'indiquer le début de l'image
FFD9h EOI End of Image Ce marqueur permet d'indiquer la fin de l'image.
FFDAh SOS Start of Scan Ce marqueur permet d'indiquer le début du balayage de l'image
FFDBh DQT Define Quantization Table Ce marqueur permet d'indiquer la définition de table de quantification.
FFDCh DNL Define Number of Lines Ce marqueur permet d'indiquer le nombre de lignes
FFDDh DRI Define Restart Interval Ce marqueur permet d'indiquer le redémarrage de l'intervalle
FFDEh DHP Define Hierarchical Progression Ce marqueur permet d'indiquer la progression hiérarchique
FFDFh EXP Expand Reference Component Ce marqueur permet d'indiquer l'extension de référence de composante
FFE0h APP0 Application Segment 0 Ce marqueur permet d'indiquer une image JFIF - JFIF JPEG, AVI1 - Motion JPEG (MJPG)
FFE1h APP1 Application Segment 1 Ce marqueur permet d'indiquer des métas données EXIF, un format TIFF IFD, un miniature JPEG (160x120) Adobe XMP
FFE2h APP2 Application Segment 2 Ce marqueur permet d'indiquer un profil couleur ICC, FlashPix
FFE3h APP3 Application Segment 3 Ce marqueur permet d'indiquer une image de balise JPS pour les images Stéréoscopique JPEG
FFE4h APP4 Application Segment 4 Ce marqueur permet d'indiquer le segment d'application numéro 4.
FFE5h APP5 Application Segment 5 Ce marqueur permet d'indiquer le segment d'application numéro 5
FFE6h APP6 Application Segment 6 Ce marqueur permet d'indiquer un profil «NITF Lossles»
FFE7h APP7 Application Segment 7 Ce marqueur permet d'indiquer le segment d'application numéro 7
FFE8h APP8 Application Segment 8 Ce marqueur permet d'indiquer le segment d'application numéro 8
FFE9h APP9 Application Segment 9 Ce marqueur permet d'indiquer le segment d'application numéro 9
FFEAh APP10 Application Segment 10, PhoTags Ce marqueurs permet d'indiquer un «ActiveObject» (messages multimédia / captions)
FFEBh APP11 Application Segment 11 Ce marqueur permet d'indiquer des ressources HELIOS JPEG (OPI Postscript)
FFECh APP12 Application Segment 12 Ce marqueur permet d'indiquer des informations d'images (ancien digicams), Photoshop sauvegarde du Web : Ducky
FFEDh APP13 Application Segment 13 Ce marqueur permet d'indiquer un Photoshop sauvegardé avec : IRB, 8BIM, IPTC
FFEEh APP14 Application Segment 14 Ce marqueur permet d'indiquer le segment d'application numéro 14
FFEFh APP15 Application Segment 15 Ce marqueur permet d'indiquer le segment d'application numéro 15
FFF0h à FFF6h JPG6 JPEG Extension 0 à JPEG Extension 6 Ce marqueur permet d'indiquer les extensions du numéro 0 à 6 de JPEG
FFF7h JPG7, SOF48 JPEG Extension 7, JPEG-LS Ce marqueur permet d'indiquer un Lossless JPEG
FFF8h JPG8, LSE JPEG Extension 8, JPEG-LS Extension Ce marqueur permet d'indiquer les paramètres d'extension Lossless JPEG
FFF9h JPG9 JPEG Extension 9 Ce marqueur permet d'indiquer l'extension numéro 9 de JPEG
FFFAh JPG10 JPEG Extension 10 Ce marqueur permet d'indiquer l'extension numéro 10 de JPEG
FFFBh JPG11 JPEG Extension 11 Ce marqueur permet d'indiquer l'extension numéro 11 de JPEG
FFFCh JPG12 JPEG Extension 12 Ce marqueur permet d'indiquer l'extension numéro 12 de JPEG
FFFDh JPG13 JPEG Extension 13 Ce marqueur permet d'indiquer l'extension numéro 13 de JPEG
FFFEh COM Comment Ce marqueur permet d'indiquer un commentaire
FFFFh Stuff Stuff Byte Ce marqueur permet d'indiquer une représentation du code FFh dans un flux de données

Segment de données NITF APP6 (premier type)

Déplacement Valeur Nom du champ Longueur Description
0 FFE6h APP6 2 octets Ce champs permet d'indiquer la données de marqueur d'application NITF.
2 variable LP 2 octets Ce champs permet d'indiquer la longueur du segment de données (2 + longueur des données applications).
4 4Eh 49h 54h 46h 00h Identifier 5 octets Ce champs permet d'indiquer la chaine de caractères d'identification terminé par un code Nulle «NITF».
9 0200h Version 2 octets Ce champs permet d'indiquer le numéro de version. L'octet de poids fort permet d'indiquer la version majeur et l'octet de poids faible permet d'indiquer la version mineur.
11 42h, 50h ou 53h IMODE 1 octet Ce champs permet d'indiquer le format de l'image : "B"="IMODE=B", "P"="IMODE=P", "S"="IMODE=S".
12 1 à 9999 H 2 octets Ce champs permet d'indiquer le nombre d'image contenu dans une ligne.
14 1 à 9999 V 2 octets Ce champs permet d'indiquer le nombre d'image contenu dans une colonne.
16 0 ou 1 Image Color 1 octet Ce champs permet d'indiquer la représentation de coloration originale : 0 = monochrome, 1 = RVB (RGB).
17 1 à 16 Image Bits 1 octet Ce champs permet d'indiquer la précision de l'image original.
18 0 à 99 JPEG Process 1 octet Ce champs permet d'indiquer le code de classe de données (0 à 99). Une valeur est définit jusqu'à maintenant : 0 = proposition général
19 1 à 29 JPEG Process 1 octet Ce champs permet d'indiquer le code de processus JPEG. Les valeurs de ce champ est définit par le ISO 10918-2. 14=«lossless» séquentiel
20 FFC4h DHT 2 octets Ce champs permet d'indiquer la données de marqueur de table Huffman.
22 variable LH 2 octets Ce champs permet d'indiquer la longueur des paramètres.
24 variable TcTh 1 octet Ce champs permet d'indiquer la classe de table et l'identificateur de table Huffman (0 à 2) de la première table.
25 0 à 255 Li 16 octets Ce champs permet d'indiquer le nombre de codes dans chaque longueur (tableau de BITS) de la première table.
41 0 à 255 Vi,j variable Ce champs permet d'indiquer les symboles (tableau HUFFVAL) de la première table.
    TcTh 1 octet Ce champs permet d'indiquer la classe de table et l'identificateur de table Huffman (0 à 2) de la dernière table.
  0 à 255 Li 16 octets Ce champs permet d'indiquer le nombre de codes dans chaque longueur (tableau de BITS) de la dernière table.
  0 à 255 Vi,j variable Ce champs permet d'indiquer les symboles (tableau HUFFVAL) de la dernière table.
  0 Flags 2 octets Ce champs est réservé pour une utilisation futur.

Segment de données NITF APP6 (deuxième type)

Déplacement Valeur Nom du champ Longueur Description
0 0FFE6h APP6 2 octets Ce champs permet d'indiquer la données de marqueur d'application NITF.
2 variable LP 2 octets Ce champs permet d'indiquer la longueur du segment de données (2 + longueur des données applications).
4 4Eh 49h 54h 46h 00h Identifier 5 octets Ce champs permet d'indiquer la chaine de caractères d'identification terminé par un code Nulle «NITF».
9 0200h Version 2 octets Ce champs permet d'indiquer le numéro de version. L'octet de poids fort permet d'indiquer la version majeur et l'octet de poids faible permet d'indiquer la version mineur.
11 42h, 50h ou 53h IMODE 1 octet Ce champs permet d'indiquer le format de l'image : "B"="IMODE=B", "P"="IMODE=P", "S"="IMODE=S".
12 1 à 9999 H 2 octets Ce champs permet d'indiquer le nombre d'image contenu dans une ligne.
14 1 à 9999 V 2 octets Ce champs permet d'indiquer le nombre d'image contenu dans une colonne.
16 0 ou 1 Image Color 1 octet Ce champs permet d'indiquer la représentation de coloration originale : 0 = monochrome, 1 = RVB (RGB).
17 1 à 16 Image Bits 1 octet Ce champs permet d'indiquer la précision de l'image original.
18 0 à 99 JPEG Process 1 octet Ce champs permet d'indiquer le code de classe de données (0 à 99). Une valeur est définit jusqu'à maintenant : 0 = proposition général
19 1 à 29 JPEG Process 1 octet Ce champs permet d'indiquer le code de processus JPEG. Les valeurs de ce champ est définit par le ISO 10918-2. 14=«lossless» séquentiel
20 00h Quality 1 octet Ce champs permet d'indiquer la table de quantification par défaut de l'image.
21 0 à 2 Stream Color 1 octet Ce champs permet d'indiquer la représentation de couleurs de la compression : 0 = monochrome, 1 = RVB (RGB), 2 = YCbCr601

Segment de données SPIFF

Déplacement Valeur Nom du champ Longueur Description
0 FFD8FFE8h MN 4 octets Ce champs permet d'indiquer la données de marqueur d'application SPIFF.
4 32 HLEN 2 octets Ce champs permet d'indiquer la longueur horizontal.
10 535049464600h IDENT 6 octets Ce champs permet d'indiquer l'identificateur secondaire.
16 0100h VERS 2 octets Ce champs permet d'indiquer la version du SPIFF.
20 0 à 4 P 1 octet Ce champs permet d'indiquer le profile d'application.
21 1 à 255 NC 1 octet Ce champs permet d'indiquer le nombre de couleurs de la composante.
22 1 à 4 294 967 295 HEIGHT 4 octets Ce champs permet d'indiquer la hauteur de l'image.
26 1 à 4 294 967 295 WIDTH 4 octets Ce champs permet d'indiquer la largeur de l'image.
30 0 à 15 S 1 octet Ce champs permet d'indiquer l'espace de couleur qu'utilise les données de l'image :
Valeur Description
0 Cette valeur permet d'indiquer un Bi-niveau.
l Cette valeur permet d'indiquer le YCbCr, ITU-R BT 709, vidéo.
2 Cette valeur permet d'indiquer qu'il n'y a pas d'espace de couleur de spécifié.
3 Cette valeur permet d'indiquer le YCbCr, ITU-R BT 601-1, RVB (RGB).
4 Cette valeur permet d'indiquer le YCbCr, ITU-R BT 601-1, vidéo.
5 Cette valeur est réservé.
6 Cette valeur est réservé.
7 Cette valeur est réservé.
8 Cette valeur permet d'indiquer un échelle de gris.
9 Cette valeur permet d'indiquer le PhotoYCC.
10 Cette valeur permet d'indiquer le RVB (Rouge-Vert-Bleu) ou en anglais RGB (Red-Green-Blue).
11 Cette valeur permet d'indiquer le CMY (Cyan-Magenta-Yellow).
12 Cette valeur permet d'indiquer le CMYK.
13 Cette valeur permet d'indiquer le YCCK.
14 Cette valeur permet d'indiquer le CIELab.
31 0, 2, 4, 8, 12 ou 16 BPS 1 octet Ce champs permet d'indiquer le nombre de bits par «sample».
32 0 à 5 C 1 octet Ce champs permet d'indiquer le type de compression des données qu'utilise l'image.
33 0 à 2 R 1 octet Ce champs permet d'indiquer l'unité du type de résolution de l'image.
34 1 à 4 294 967 295 VRES 4 octets Ce champs permet d'indiquer la résolution vertical.
38 1 à 4 294 967 295 HRES 4 octets Ce champs permet d'indiquer la résolution horizontal.

Remarque

Voir également

Langage de programmation - Traitement d'image - Accueil

Référence

CCITT: INFORMATION TECHNOLOGY - DIGITAL COMPRESSION AND CODING OF CONTINUOUS-TONE STILL IMAGES – REQUIREMENTS AND GUIDELINES, Publication: T.81, 09/92
National Imagery and Mapping Agency: NATIONAL IMAGERY TRANSMISSION FORMAT STANDARD (NITFS) BANDWIDTH COMPRESSION STANDARDS AND GUIDELINES, Publication: N-0106-97, 25 August 1998
Annex F of ITU-T Recommendation T.84 | ISO/IEC IS 10918-3, DIGITAL COMPRESSION AND CODING OF CONTINUOUS-TONE STILL IMAGES - Extensions

Dernière mise à jour : Mardi, le 24 juin 2014