Youhou! Plein de nouveaux acronymes!
Le support des profils colorimétriques dans Firefox a toujours été cahotique. Heureusement, beaucoup de monde ne sont pas intéressés par cela (sauf lorsque cela foire et que le bleu apparaît rose ou similaire).
Un profil colorimétrique est associé à un périphérique de sortie (écran ou imprimante) ou d'entrée (appareil photo, caméra, scanneur) et donne des indications sur le rendu des couleurs par celui-ci. Un programme y faisant attention modifie les couleurs des images de manière à ce que le rendu par le périphérique de sortie soit le plus proche possible de l'original. Pour un infographiste, il est particulièrement important que le rendu à l'écran et le rendu imprimé des couleurs soit identique.
Il existe une norme pour les profils, la norme ICC avec deux version v2 et v4.
Firefox utilise le profil associé à une image pour transmettre la bonne information à l'imprimante et à la carte graphique, et ce depuis la version 3.0.
Petit hic cependant, la bibliothèque utilisée,
lcms, bien que fonctionnant très bien avait des problèmes de sécurité. En effet, elle avait été conçue pour fonctionner dans un système sûr (par exemple le programme associé à un appareil photo) et pas face à des données potentiellement dangereuses.
Une nouvelle bibliothèque a donc été développée par Mozilla,
qcms, mais moins puissante, puisqu'elle ne supportait que les profils v2 (et encore pas tous). Cela engendra une régression dans Firefox 3.5.
Cette régression a été mitigée (les profils v4 sont désormais considérés comme des profils v2 et marchottent un peu quand même) depuis. Néanmoins il reste des cas où cela ne marche pas.
Aussi Jeff Muizelaar et Benoît Girard se sont attelés à la tâche d'améliorer cela et d'introduire le support pour les ICC v4 dans Firefox.
Première chose qui a été faite, c'est le support des CLUT (et pour ICC v2 et pour ICC v4). En effet les différents périphériques d'entrée et de sortie ainsi que Firefox utilisent différentes manières de stocker une couleur. Des classiques RGBA, RGBa, sRGB, Hue (HSL) connus des développeurs web aux plus spécialisés XYZ et LAB (définis par la Commission internationale de l'éclairage en 1931 et dans les années 1970), en passant par YUV et YCbCr très important pour les dev de Firefox s'occupant de vidéo.
Mais ce n'est pas tout. Le passage de l'un à l'autre n'est pas trivial car toutes ne permettent pas de stocker les mêmes couleurs. Certaines méthodes couvrent le spectre de manière "linéaire", d'autres pas (ils permettent de discriminer plus de couleurs là où l'œil humain est plus sensible, et moins là il l'est moins). De plus les périphériques, bien que comprenant une ou plusieurs de ces méthodes, ne sont pas capable de toutes les afficher (on dit que leur
gamut est plus petit que l'espace des couleurs). Il faut donc transcoder les couleurs vers la couleur la plus proche.
Et c'est à cela que sert le profil. Et dans ICC, il y a deux manières de le faire, soit avec un matrice 3x3 soit avec un CLUT. La matrice 3x3 s'adapte bien aux écrans et moins aux imprimantes qui sont moins linéaires. C'est le plus simple et c'était supporté par qcms dès Firefox 3.5. Cela permet de faire n'importe quelle transformation linéaires (ressortez vos cours d'algèbre linéaire: un vecteur à 3 multiplié par une matrice 3x3 donne un vecteur à 3 composantes

).
L'autre méthode, un peu plus compliquée et gourmande en mémoire, est plus souple et permet de décrire des non-linéarités (plus il y en a, plus ce sera lent et gourmand en mémoire): ce sont les
Colour Look-up Tables (CLUT), les lookup tables étant une structure courante en informatique permettant d'accélérer les calculs en stockant dans un tableau des données précalculées. C'est la version informatique des tables de logarithme de nos grands-parents.
Et bien dès cette Nightly, Firefox supporte les CLUT et dans les profils ICCv2 et dans les ICCv4. Cool non? (À la condition que la préférence gfx.color_management.enablev4 — pas forcément bien nommée puisqu'elle affecte les ICCv2 aussi — soit mise au préalable à true. Ce n'est pas sa valeur par défaut pour l'instant.
Voili, voilou qui devrait améliorer le support des couleurs en release dans Firefox dès le 8.11.2011.
Pour tester, chez moi, les 4 images ont des couleurs cohérentes désormais:
http://www.color.org/version4html.xalter
Et le billet de Benoît Girard sur le sujet:
http://benoitgirard.wordpress.com/2011/ ... rovements/
Bug 538114 — qcms doesn't support LUT ICCv2 profiles (both LAB & XYZ)