FRDX File Redux

Cryogen… la petite histoire

Lorsque j’ai eu l’idée de base de cryopng (mettre autre chose que du noir dans les composants RVB des pixels totalement transparents des PNG-32 dans le but d’améliorer la compression) je me suis retrouvé dans l’obligation d’écrire également un script d’optimisation pour prouver que cryopng apportait effectivement un plus et permettait dans certains cas de faire mieux que les autres solutions déjà existantes… sans le savoir je venais de mettre le pied dans une galère de fous.
À l’époque pngslim et punypng étaient les références à battre, aujourd’hui l’excellent ScriptPNG de Cédric Louvrier place la barre encore plus haut… d’autant plus que Windows dispose de quelques outils qui n’existent pas pour Mac OS X ou Linux. Je reçois occasionnellement des courriels qui me demandent comment bien utiliser cryopng ou huffmix. Cette page est en quelque sorte une ébauche de réponse ainsi qu’un guide pour celles et ceux qui voudraient mettre au point (ou simplement comprendre) un script d’optimisation PNG sur un système apparenté Unix.

Adobe Photoshop : Save for Web…

D’aucuns pourraient croire qu’optimiser les images PNG n’est plus utile depuis qu’Adobe a intégré le gros des fonctions d’Image Ready directement dans Photoshop sous la forme d’Enregistrer pour le Web… Malheureusement c’est loin d’être le cas et Photoshop n’est pas le seul à pécher à ce niveau. « Enregistrer pour le Web » permet effectivement d’éviter de gros écueils (comme l’utilisation du CMJN ou plus de 8 bits par composant), d’appliquer un profil sRGB en un clic et d’avoir un certain contrôle sur les métadonnées incluses dans le fichier. Mais en définitive PNG reste sous exploité : impossible de désigner une couleur transparente pour un PNG-24, impossible de définir plusieurs couleurs partiellement transparentes pour un PNG-8, impossible de produire de vrais niveaux de gris et pour finir la compression de l’image sans être mauvaise peut souvent être améliorée…

No Silver Bullet… scripts

Il n’existe malheureusement pas un outil unique qui produirait le plus petit fichier possible (on peut toutefois encore espérer de nouveaux développements autour de zopfli, mais l’avenir appartient très certainement à WebP et SVG désormais). Des scripts sont donc mis en œuvre pour combiner plusieurs outils (souvent dans un ordre précis) afin de tirer la quintessence de chacun. La puissance de calcul disponible aujourd’hui sur une machine de bureau permet de faire plus de choses (parfois en parallèle) en un temps raisonnable, mais la loi des rendements décroissants s’applique rapidement et passé un certain point pour espérer gagner quelques octets supplémentaires il faut y consacrer énormément de ressources CPU et donc du temps et de l'électricité.

Compression sans perte, asymétrique, non déterministe

Bien que la compression d’une image PNG puisse prendre un certain temps sa décompression sera toujours bien plus rapide, c’est une compression asymétrique de ce point de vue (contrairement au JPEG dont l’effort de calcul pour la compression est pratiquement identique à celui de la décompression). Cette asymétrie s’explique par le nombre considérable de choix à réaliser lors de la compression (recherches dans la fenêtre glissante de Deflate ou sélection du filtre à appliquer à chaque ligne), chaque choix retenu va avoir une influence plus ou moins grande sur la taille finale du fichier, il devient donc très rapidement impossible d’essayer toutes les combinaisons possibles et donc de trouver la représentation réellement optimale de chaque image. Chaque variation de paramètre ou d’algorithme peut potentiellement conduire à un fichier différent, ceci est tellement complexe que kflate permet de s'en remettre au hasard pour initialiser certains de ses paramètres et pngwolf utilise un algorithme génétique pour sélectionner les meilleurs filtres.

Conseils gratuits

- Laissez tomber, ne sacrifiez pas votre santé mentale pour une poignée d’octets !
- Utilisez WebP (avec ou sans perte) c’est autrement plus simple.
- Lisez les spécifications PNG 1.2 en anglais, russe et araméen avant de continuer.
- Traduisez par écrit la RFC1951 en alsacien, basque, breton, corse ou picard, au choix.
- N’ayez strictement aucune confiance concernant ce que vous pouvez lire à ce sujet sur le net.

À l’aube des temps…

Les premiers outils d’optimisation des images PNG datent du milieu des années 90, certains de ceux-ci sont encore pleinement fonctionnels et actualisés de temps à autre. Ils reposent sur libpng et zlib, dont ils ont parfois influencé le développement.
- pngcrush
- optipng
- pngoptimizercl
- pngrewrite