FRDX File Redux

Introduction

Ce petit site a pour but de vous dévoiler les arcanes des principaux formats d'image et de la compression Deflate/Gzip ainsi que les meilleurs outils pour produire les plus petits fichiers possible. David Huffman a inventé le codage qui porte son nom en 1952, le principe de séparation de la luminance et de la chrominance remonte aux recherches réalisées par Georges Valensi en 1938, la compression de données n'est donc pas un domaine particulièrement nouveau, son usage s'est largement banalisé, elle devient souvent transparente pour le grand public. Quelques bibliothèques bien rodées comme Zlib offrent aux développeurs de logiciels des solutions simples à mettre en œuvre qui font qu'en général ils n'ont plus à comprendre le fonctionnement intrinsèque de l'algorithme de compression. Quelques ouvrages en français ont été publiés à ce sujet au début des années 90, les spécifications des différents formats ou algorithmes sont elles souvent en anglais et parfois d'un volume conséquent… mais c'est en se plongeant dans ce genre de lectures qu'on se rend compte que nombre de logiciels sous-exploitent les possibilitées réellement offertes par certains formats. Entre ce que propose Photoshop dans ses dialogues d'enregistrement de fichiers et les informations erronées colportées par quelques sites… il y a probablement quelques éclairsissements à fournir.


Performance Web

Internet n'est pas toujours synonyme de haut débit : la fibre, le câble ou l'ADSL ne sont pas accessibles à tous, les réseaux WiFi publics sont parfois encombrés, les accès par réseau mobile EDGE ou 3G rencontrent un succès grandissant mais le débit de ces derniers est tributaire de différents facteurs (offre commerciale, encombrement et distance de l'émetteur, perturbations électromagnétiques… ou simplement bridage appliqué par l'opérateur en cas de dépassement du volume mensuel autorisé).

L'hébergement d'un site web est rarement gratuit, il a un coût lié au fonctionnement des serveurs et l'utilisation des infrastructures du réseau (espace disque, puissance processeur, volume des données émises…). Par ailleurs les sites réactifs et ayant un temps de chargement court sont bien plus appréciés par les internautes, mais également plus à même d'être évalués positivement par les moteurs de recherche.

Dans d'autres domaines la conception d'interfaces ou d'applications pour de petits appareils électroniques impose souvent des contraintes liées à leur capacité de stockage limitée.


La solution

Réduire la taille (en octet) des photographies, animations, éléments d'interface et autres fichiers (CSS, JavaScript, texte…) permet de les transmettre plus rapidement, d'économiser de la bande passante ainsi que de l'espace disque mais peut également soulager la charge d'un serveur http.


Les formats

JPEG, GIF, PNG, SVG et SWF (Flash) sont les formats d'images ou d'animation les plus courants. Il convient d'utiliser le bon format en fonction du contenu à diffuser et les bons outils pour les optimiser.

La compression Deflate est souvent utilisée de manière transparente (mod_deflate) entre serveur et client web lors de la transmission de données de type texte, il est toutefois possible de mieux compresser les fichiers statiques de ce type en opérant une minification préalable et en utilisant des moteurs de compression plus sophistiqués que la zlib.


Aller plus loin…

Les fichiers comportent souvent des informations annexes : commentaire, nom de l'application ayant servi à les générer, prévisualisation, géolocalisation, conditions de prise de vue, courbe gamma… dont on ne soupçonne pas toujours l'existence et qui peuvent s'avérer inutiles voire nuisibles.

Un type de fichier peut présenter des variantes : affichage entrelacé ou progressif, exploitation de la transparence, filtrage, compression de base ou évoluée… qui n'influent pas sur l'image finale affichée mais sur son codage et donc la taille du fichier.
La compression non destructive (Deflate) peut s'avérer plus ou moins efficace selon les logiciels utilisés, il est en effet difficile d'implémenter cet algorithme de compression de façon optimale sans recourir à des temps de traitement particulièrement longs.