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
- Apple : Les systèmes d'exploitation d'Apple iOS préconise plutôt l'utilisation du format HEIF.
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