Exemple de compression d'image

ExempleImage bitmap

Pour une image bitmap, le codage RGB Windows (24 bits) sert de référence puisqu'elle code l'image sans la compresser. Sa structure est en gros la suivante : En-tête / Palette / Suite de pixels. Une première compression, avec perte, consiste à réduire le nombre de bits alloués à chaque pixel. A la place des 16 777 216 couleurs (24 bits par pixel, c'est-à-dire 3 octets par pixel pour indiquer ses intensités en rouge, vert et bleu) on a ainsi :

  • 256 couleurs (8 bits par pixel, c'est-à-dire un octet par pixel)

  • 16 couleurs (4 bits/pixel)

  • monochrome (1 bit par pixel)

Images bitmap 24 bits (à gauche) et 256 couleurs (à droite)

Ci dessus, deux images d'un papillon, dans un carré de 128 pixels de côté. La photo de gauche est en 24 bits/pixel, tandis que celle de droite est en 8bits/pixel (256 couleurs).

La place mémoire tombe dans cet exemple de 49 208 octets à 17 642 octets, soit une compression de près de 65%. La détérioration de la qualité n'est pas forcément perceptible à l’œil.

L'image bitmap peut aussi avoir un codage RLE[1] compression sans perte, qui ne s'applique toutefois que pour les images 16 ou 256 couleurs.

ComplémentPrincipe de la Compression RLE

Considérons un écran de texte noir sur fond blanc : il est constitué de longues séquences de pixels blancs pour le fond et de courtes séquences de pixels noirs pour le texte.

Représentons une ligne d'un tel écran, avec B (Black) pour les pixels noirs et w (White) pour les pixels blancs :

wwwwwwwwwwwwBwwwwwwwwwwwwwwBBBwwwwwwwwwwwwwwwwwwwwwwwBwwwwwwwwwww

Le codage RLE consiste à indiquer pour chaque suite de pixels d'une même couleur le nombre de pixels de cette séquence.

On obtient : 12w1B14w3B23w1B11w

Le résultat comporte donc moins de caractères, mais ce n'est pas toujours vrai.

Ainsi, une alternance de blanc et de noir wBwBwBwBwB donne : 1w1B1w1B1w1B1w1B1w1B ce qui est DEUX FOIS PLUS LONG !

La compression RLE ne donne donc pas toujours de bons résultats :

  • la taille d'un fichier peut légèrement augmenter ! (si l'image ne possède pas beaucoup de pixels consécutifs identiques)

  • la taille peut en revanche dans certains cas être divisée par 2