comment fonctionne la compression jpeg
Comment fonctionne la compression JPEG
Le JPEG fonctionne en écartant de l'information que votre œil a du mal à remarquer. Comprendre laquelle explique pourquoi la qualité 80 passe bien, pourquoi le texte attrape des halos et pourquoi réenregistrer ronge le fichier.
01
Étape un : séparer la luminosité de la couleur, puis jeter la couleur
L'image est convertie du rouge-vert-bleu vers un canal de luminosité et deux canaux de différence de couleur. Ce n'est pas encore de la compression : c'est une réorganisation qui sépare ce que votre œil sait bien faire de ce qu'il fait mal.
La vision humaine résout le détail fin bien mieux dans la luminosité que dans la couleur. Le JPEG en profite tout de suite avec le sous-échantillonnage de la chrominance : les canaux de couleur sont conservés à la moitié de la résolution dans chaque direction, ce qui écarte les trois quarts des données de couleur avant qu'aucun calcul astucieux ne démarre. Sur une photographie, c'est pour ainsi dire invisible.
Sur une capture d'écran avec du texte rouge sur blanc, c'est bien visible, et c'est la raison pour laquelle le texte à l'intérieur d'un JPEG attrape des franges colorées. Il n'y a jamais eu assez de résolution de couleur pour poser un bord rouge net.
02
Étape deux : transformer des blocs de 8×8 en fréquences
Chaque canal est découpé en blocs de 8×8 pixels, et chaque bloc passe par une transformée en cosinus discrète. La sortie n'est pas des pixels. Ce sont 64 coefficients décrivant la quantité de chaque fréquence spatiale contenue dans le bloc — un pour la luminosité moyenne, puis des motifs de variation de plus en plus fins.
Dans la plupart des blocs du monde réel, l'énergie s'accumule dans les premiers coefficients. Un morceau de ciel est presque entièrement sa valeur moyenne, avec des quantités minuscules de tout le reste. Cette étape est sans perte et réversible ; elle n'a pas économisé un octet. Ce qu'elle a fait, c'est trier l'information par ordre d'importance.
03
Étape trois : la quantification — c'est là que la partie se joue
Chacun des 64 coefficients est divisé par une valeur tirée d'une table de quantification et arrondi à un entier. Les petits coefficients deviennent zéro. C'est la seule étape avec perte du JPEG, et c'est exactement ce que règle le curseur de qualité : la qualité 90 utilise une table douce, la qualité 30 une table brutale.
Les tables sont conçues pour diviser plus durement les coefficients de haute fréquence, parce que c'est là que se trouve le détail fin dont votre œil a le moins de chances de remarquer l'absence. Après quantification, un bloc typique parti avec 64 nombres non nuls en garde cinq ou six, et le reste est à zéro — et une longue suite de zéros est exactement ce que l'étage final comprime jusqu'à presque rien.
Tout ce que les gens remarquent dans le JPEG vient de cette étape. L'aspect en damier aux basses qualités, ce sont des blocs de 8×8 dont les coefficients ont été aplatis au point que les blocs voisins ne s'accordent plus sur le bord qu'ils partagent. L'anneau autour du texte, ce sont les coefficients de haute fréquence nécessaires pour décrire un bord net, quantifiés jusqu'à disparaître, laissant une ondulation. Les deux sont l'algorithme fonctionnant comme prévu sur un contenu pour lequel il n'a pas été prévu.
- Qualité 90–100
- Quasi sans perte, et volumineux. N'a de sens que pour des images que vous rééditerez.
- Qualité 75–85
- Le bon compromis. En général un tiers de la taille de 100 et difficile à distinguer.
- Qualité 50–70
- Visible si vous regardez de près. Convient aux vignettes, pas à quoi que ce soit contenant du texte.
- En dessous de 50
- Le damier et les anneaux sautent aux yeux. Le gain par rapport à 75 est bien inférieur aux dégâts.
04
Étape quatre : emballer, sans perte
Les coefficients quantifiés sont lus dans un ordre en zigzag qui va de la basse vers la haute fréquence, ce qui regroupe tous ces zéros en une seule longue suite à la fin. Cette suite est effondrée par codage par plages, et le résultat est codé entropiquement par codage de Huffman.
Cet étage est entièrement sans perte et rend d'ordinaire compte du dernier grand facteur de réduction. Rien ici ne dégrade l'image ; c'est juste un emballage efficace des nombres laissés par l'étape précédente.
05
Perte de génération : pourquoi réenregistrer ronge le fichier
Ouvrez un JPEG, ne changez rien, réenregistrez-le, et le fichier n'est pas identique. Décoder reconstruit des pixels à partir de coefficients quantifiés ; réencoder repasse ces pixels reconstruits par la DCT et quantifie de nouveau. La seconde quantification arrondit des nombres qui avaient déjà été arrondis, et l'erreur s'accumule.
Une génération de plus en qualité haute est presque indétectable. Dix sautent aux yeux — c'est le mécanisme derrière toute image devenue capture d'écran, enregistrée puis repartagée jusqu'à ressembler à un fax.
La règle pratique en découle directement. Conservez l'original. Éditez à partir de l'original et non d'une copie exportée. Et lorsqu'un fichier doit maigrir, redimensionnez avant de réencoder : réduire les dimensions en pixels retire des données proprement, alors que baisser la qualité sur des pixels en taille pleine les retire de façon destructrice.
06
Quand le JPEG est le mauvais choix
Tout ce qui précède suppose un contenu photographique : des dégradés doux, pas de bords nets, pas de répétition exacte. Donnez au JPEG l'inverse et chaque décision de conception travaille contre vous. Une capture d'écran, un logo, un graphique, un dessin au trait — ce sont de grands aplats et des limites franches, c'est-à-dire exactement le contenu que le sous-échantillonnage de la chrominance floute et que la quantification remplit d'anneaux.
Le PNG a été fait pour ce cas. Il compresse sans perte en prédisant chaque pixel à partir de ses voisins et en codant la différence, ce qui est spectaculairement efficace sur l'aplat et inutile sur la photographie. Toute la règle est là : le ton continu va au JPEG, l'aplat et les bords nets vont au PNG, et tout ce qui a besoin de transparence doit être en PNG ou en WEBP, parce que le JPEG n'a aucun canal alpha.