Format Jpeg d'Ibm

Cette section présente le format d'images Joint Photographic Experts Group (JPEG) d'Ibm utilisé par Up ! Joint Photographic Experts Group.

Une image au format Joint Photographic Experts Group (JPEG) d'Ibm est encodée avec la convention de Intel i.e. Little Endian.

La résolution est variable.

Les images sont uniquement en couleurs vraies, voire en niveaux de gris.

Il existe quatre méthodes de compression reposant sur deux algorithmes :

Les méthodes altérant l'image d'origine utilise la Transformation de Fourier Discrète (TFD).

La méthode progressive permet un affichage progressif de l'image lors de son téléchargement, un peu comme l'entrelaçage de Graphics Interchange Format (GIF).

La méthode hiérarchique permet un affichage progressif de l'image lors de son téléchargement, un peu comme dans Google Earth. Elle n'est pas supportée par Up ! Jpeg.

Algorithmes de compression Jpeg

Compression destructive

Le principe de l'algorithme de compression avec altération de l'image d'origine est le suivant :

La méthode de codage arithmétique n'est pas supportée par Up ! Jpeg parce qu'Ibm a déposé des brevets qui ne sont pas libres d'usage.

La précision des calculs est sur 8 ou 12 bits.

Toutes les valeurs des composantes ne sont pas forcément conservés. Un échantillonnage peut être appliqué pour, par exemple, conserver toutes les informations de luminance et seulement une information sur deux de chrominance.

Compression non destructive

Le principe de l'algorithme de compression sans alération de l'image d'origine est le suivant :

La méthode de codage arithmétique n'est pas supportée par Up ! Jpeg parce qu'Ibm a déposé des brevets qui ne sont pas libres d'usage.

La précision des calculs varie de 2 à 16 bits.

Blocs du flux Jpeg

Le format Joint Photographic Experts Group (JPEG) est flux composé d'une succession de blocs caractérisés par un identifiant.

Voici les codifications des blocs gérés par :

IdentifiantDescription
SOIDébut d'image.
APPInformations sur l'image.
COMCommentaire sur d'image.
SOFDébut des données d'image.
DHTDéfinition d'une table Huffman.
DQTDéfinition d'une table de quantification.
DRIDéfinition des périodes de reprises.
SOSDébut d'une partie des données de l'image.
RSTReprise dans une partie de l'image.
EOIFin d'image.

La première propriété du bloc est sa taille, ce qui permet de le sauter si son type n'est pas géré.

Bloc Début d'image - SOI

Voici les propriétés du bloc :

PropriétéTaille en octetsDescription
Etiquette2.0xFFD8.

Bloc Informations sur l'image - APP

Voici les propriétés du bloc :

PropriétéTaille en octetsDescription
Etiquette2.Etiquette du bloc.
Taille2.Taille non signée du bloc.

Bloc APP0

Voici les propriétés du bloc :

PropriétéTaille en octetsDescription
Identifiant5.JFIF.
Version2.Version d'encodage.
Unite1.Unité de mesure.
NbPixelsX2.Nombre de pixels non signé en abscisse.
NbPixelsY2.Nombre de pixels non signé en ordonnée.
LargeurPixels1.Largeur non signée de l'icône de l'image en pixels.
HauteurPixels1.Hauteur non signée de l'icône de l'image en pixels.
IconeVariable.Pixels de l'icône de l'image en RGB sur 8 bits.

Les valeurs possibles de Unite sont :

Bloc APP1-APP15

Ces blocs ne sont pas supportés par Up ! Jpeg.

Bloc Commentaire sur l'image - COM

Voici les propriétés du bloc :

PropriétéTaille en octetsDescription
Etiquette2.Etiquette du bloc - 0xFFFE.
Taille2.Taille non signée du bloc.
CommentaireVariable.Commentaire.

La taille de la propriété Commentaire est donnée par la valeur de la propriété Taille. Le commentaire est écrit en Ascii.

Bloc Début des données d'image - SOF

Voici les propriétés du bloc :

PropriétéTaille en octetsDescription
Etiquette2.Etiquette du bloc.
Taille2.Taille non signée du bloc.
Precision1.Précision des calculs.
HauteurPixels2.Hauteur non signée de l'image en pixels.
LargeurPixels2.Largeur non signée de l'image en pixels.
NbComposants1.Nombre de composants.
TableComposantsVariable.Table des composants.

Les valeurs possibles de Etiquette sont :

Voici les propriétés d'un élément de la table des composants :

PropriétéTaille en octetsDescription
IdentifiantComposant1.Identifiant unique du composant.
IdentifiantTableHuffman0,5.Identifiant de la table Huffman.
Echantillonnage0,5.Echantillonnage du composant.
IdentifiantQuantificateur1.Identifiant de la table de quantification.

Les valeurs possibles de Echantillonnage sont :

Bloc Définition d'une table Huffman - DHT

Voici les propriétés du bloc :

PropriétéTaille en octetsDescription
Etiquette2.Etiquette du bloc - 0xFFC4.
Taille2.Taille non signée du bloc.
Cible0,5.Cible.
IdentifiantTableHuffman0,5.Identifiant de la table Huffman.
LargeurPixels2.Largeur non signée de l'image en pixels.
TableNbCodes16*1.Table du nombre de codes par longueur.
TableValeursVariable.Table des valeurs des codes.

La taille de la table TableValeurs est donnée par le cumul des valeurs de la table TableNbCodes. Cette dernière comporte 16 éléments.

Bloc Définition d'une table de quantification - DQT

Voici les propriétés du bloc :

PropriétéTaille en octetsDescription
Etiquette2.Etiquette du bloc - 0xFFDB.
Taille2.Taille non signée du bloc.
Precision0,5.Precision des éléments.
IdentifiantTableQuantification0,5.Identifiant de la table de quantification.
TableValeurs64 ou 128.Table des valeurs de quantification.

Les valeurs possibles de Precision sont :

Bloc Définition des reprises - DRI

Voici les propriétés du bloc :

PropriétéTaille en octetsDescription
Etiquette2.Etiquette du bloc - 0xFFDD.
Taille2.Taille non signée du bloc.
TailleIntervalle2.Taille de l'intervalle de reprise.

Le Minimum Code Unit (MCU) est la plus petite combinaison possible des composants au regard de l'échantillonnage. Un peu comme le Plus Petit Commun Multiple (PPCM) en mathématique.

Le mode reprise est activé par la présence de la marque DRI. En ce cas, quand l'image est mal encodée, il est possible de faire l'impasse sur la partie détruite et de reprendre le décodage à la marque de reprise suivante.

La valeur de la propriété TailleIntervalle spécifie le nombre de MCUs distançant les marques de reprise.

Bloc Partie des données de l'image - SOS

Voici les propriétés du bloc :

PropriétéTaille en octetsDescription
Etiquette2.Etiquette du bloc - 0xFFDA.
Taille2.Taille non signée du bloc.
NbComposants1.Nombre de composants.
TableComposantsVariable.Table des composants.
DebutZigZag1.Début du zig-zag.
FinZigZag1.Fin du zig-zag.
PrecisionPrecedente0,5.Précision de la bande précédente.
PrecisionCourante0,5.Précision de la bande courante.

Les données de l'image peuvent être découpées en une ou plusieurs parties. Dans une partie :

Bloc Reprise dans une partie de l'image - RST

Voici les propriétés du bloc :

PropriétéTaille en octetsDescription
Etiquette2.Etiquette du bloc.
Les valeurs possibles de Etiquette sont :

Bloc Fin d'image - EOI

Voici les propriétés du bloc :

PropriétéTaille en octetsDescription
Etiquette2.0xFFD9.

Enchaînement des blocs du flux Jpeg

Voici la grammaire d'enchaînement des blocs dans le flux Jpeg :

FluxJpeg :

ParametresGlobauxOption : ListeContenus : Contenu : ParametresLocauxOption : ListePartiesDonneesImage : PartieDonneesImage : ListeDonneesImage :