Images et graphiques pour le web: Le format PNG

Un peu d'histoire

L'histoire du format PNG commence le 28 décembre 1994. Dans la quiétude de l'année finissante, les sociétés Compuserve et Unisys rendent public un accord de licence relatif à la technique de compression LZW. Désormais, tous les créateurs de logiciel utilisant cette technique doivent payer des royalties à Unisys.

Dans le monde du logiciel libre, c'est la consternation, car le format GIF utilise la compression LZW. Tous ceux qui ont écrit des programmes gratuits impliquant le format GIF ne peuvent plus ni les utiliser, ni les distribuer. Légalement, il n'est plus possible de publier sur le web les images GIF créées à l'aide de ces programmes.

Tandis que les programmeurs bénévoles expriment violemment leur indignation dans les groupes de discussion, l'un d'entre eux (Thomas Boutell) se met tranquillement au travail. Le 4 janvier 1995, il publie un premier projet de format destiné à remplacer le format GIF. Le jour même, un groupe de volontaires enthousiastes se met au travail. Un mode de compression, libre de droits, est immédiatement proposé ; il est issu des recherches initiales de Lempel et Ziv. Les premières spécifications sont publiées le 16 janvier. Le nom du nouveau format, PNG (Portable Network Graphics), est définitivement adopté le 23 janvier. Les premières images au format PNG sont publiées sur le web le 13 mars, mais seuls les initiés dotés d'un lecteur adéquat peuvent les voir. Le premier site web dédié au PNG est mis en ligne le 13 juin... il s'est bien étoffé depuis !

En quelques mois, le format PNG a pris une forme quasi définitive, et les organismes officiels du web vont s'impliquer à leur tour. Le 8 décembre, le W3C publie un premier projet. Le 23 février 1996, IETF en fait autant. Le 14 octobre, IANA publie le type MIME (image/png). En 1998, les travaux de normalisation du format PNG commencent à l'ISO (ils viennent d'aboutir -- ISO/IEC 15948:2003). Ouf ! le format PNG est lancé.

Le problème, désormais, consiste à obtenir que les deux principaux éditeurs de navigateur implémentent le nouveau format. C'est chose faite chez Microsoft dès la version 4.0 pour Windows (et en 2000 pour la version 5 de IE pour Mac), mais chez Netscape, on se montre plus réticent. La version 4.04 du Communicator supporte enfin le format PNG, mais ce support disparaît avec les versions suivantes. Motif ? en avril 1998, une petite entreprise (Stac, Inc.) prétend que le mode de compression du format PNG utilise deux de ses brevets, et Netscape joue la prudence. Le cauchemar du format GIF recommencerait-il ? Non, il ne s'agit que d'un bluff sans suite, ou d'un malentendu, mais les promoteurs (tous bénévoles) du format PNG ont eu des sueurs froides. Cependant le mal est fait car, à cette époque (1997-8), Netscape domine encore le marché des navigateurs. Nous nous souvenons, au CERIG, d'une petite image PNG que nous avions introduite dans une note technique, et que nous avons dû remplacer rapidement par une image gif, parce que certains utilisateurs de Netscape ne la voyaient pas. Aujourd'hui, c'est plutôt Internet Explorer qui est sur la sellette, parce qu'il ne gère pas correctement la transparence des images PNG, et que ce défaut ne sera pas corrigé avant 2004 au plus tôt.

A la fin des années 1990, le format PNG entame sa traversée du désert. Le logiciel de dessin utilisé par presque tous les graphistes -- Photoshop -- ne supporte pas correctement le format PNG, du moins pas avant la version 6. De plus, dans cette version et la suivante, l'algorithme de compression n'est pas très performant, si bien que les images enregistrées au format PNG apparaissent aussi lourdes -- sinon plus -- que celles enregistrées au format GIF. Dans ces conditions, tous les graphistes qui travaillent pour le web continuent à utiliser le format GIF pour les dessins au trait. Certes, le logiciel de dessin Fireworks compresse nettement mieux le format PNG que Photoshop, mais il est beaucoup moins utilisé que ce dernier, car il est pauvre en filtres et en effets.

A l'heure où nous écrivons ces lignes (fin 2003), le format PNG trouve enfin une modeste place sur le web. Bref, ce n'est plus seulement un format dont on parle, c'est également un format dont on commence à se servir.

Dernière minute : le W3C vient de valider (10 novembre 2003) la deuxième révision du format PNG. Cette opération concerne des détails mineurs, si bien que le format PNG peut être considéré comme stable.

 

Les deux formats PNG

Il existe en fait deux types d'image PNG :

Pour comparer les deux formats PNG entre eux et avec les formats GIF et JPEG, nous avons utilisé l'image de l'un des boutons de navigation qui figurent en haut de cette page, et nous nous sommes servis des versions 7 et 8 (cette dernière est appelée "CS") de Photoshop. Le format PNG-24 a été obtenu à l'aide de la fonction "Enregistrer sous...", les autre formats à l'aide de la fonction "Enregistrer pour le web... ". La palette des images GIF et PNG-8 a été limitée à 64 couleurs (palette sélective avec diffusion, pas de tramage, pas d'entrelacement, pas de transparence). L'image JPEG a été enregistrée en qualité 70/100 afin de ne pas dégrader l'aplat de couleur orange, et avec l'option "optimisée" dans Photoshop CS.

image GIF
(749 octets)
image PNG-8
(893 octets)
image PNG-24
(1760 octets)
image JPEG
(1411 octets)
Images issues du logiciel Photoshop (version 7)

 

image GIF
(769 octets)
image PNG-8
(754 octets)
image PNG-24
(1224 octets)
image JPEG
(1090 octets)
Images issues du logiciel Photoshop (version 8 "CS")

Comme nous l'avons déjà signalé, Photoshop 7 n'est pas très performant dans la compression des images PNG (la version 8 est nettement meilleure). Il en résulte que les image PNG-8 générées dans Photoshop 7 pèsent généralement plus lourd que les image GIF correspondantes (toutes choses égales par ailleurs). Notons au passage que l'image JPEG pèse plus lourd que l'image GIF, malgré la présence de dégradés, parce que l'image est de petite dimension (36x32 pixels).

Nous voyons également sur la figure ci-dessus que l'image au format PNG-24 pèse plus lourd que l'image JPEG. Cela provient du fait qu'elle utilise une technique de compression non dégradante. D'une manière générale, le format PNG-24 ne peut pas lutter efficacement avec le format JPEG, si bien qu'on ne le rencontre pas sur le web. Il est utilisé, par contre, comme format natif du logiciel Fireworks.

 

Le rôle du logiciel de dessin

Le logiciel de dessin joue un double rôle : sur le poids de l'image d'une part, sur la manière dont les navigateurs affichent cette image d'autre part.

Le poids de l'image. Le logiciel de dessin Fireworks de Macromedia est réputé fournir des images PNG-8 moins lourdes que Photoshop. Pour effectuer une comparaison, nous avons de nouveau utilisé l'un des boutons de navigation qui figurent en haut de cette page. Nous avons limité à 64 le nombre de couleurs, et utilisé une palette adaptative, sans tramage ni transparence. Nous constatons que, sur cet exemple, l'image PNG créée dans Fireworks MX pèse 18 % de moins que l'image PNG créée dans Photoshop 7. Les différences sont nettement plus faibles avec la version CS de Photoshop, laquelle vient d'arriver sur le marché (déc. 2003).

image GIF
(749 octets)
image PNG-8
(893 octets)
image GIF
(769 octets)
image PNG-8
(754 octets)
image GIF
(717 octets)
image PNG-8
(728 octets)
Images Photoshop 7 Images Photoshop CS Images Fireworks MX

Faut-il jeter Photoshop aux orties et ne plus dessiner que dans Fireworks ? C'est aller un peu vite ! Photoshop fournit beaucoup plus de filtres et d'effets que son concurrent et, de ce point de vue, il est pour l'instant imbattable. On peut donc continuer à dessiner dans Photoshop, mais il est intéressant d'importer ensuite l'image dans Fireworks pour comparer le poids des fichiers.

Pour transporter l'image de Photoshop à Fireworks, il faut l'enregistrer dans un format non dégradant reconnu par les deux logiciels. Le plus simple consiste à utiliser PNG-24, qui sert de format natif à Fireworks, et donne de ce fait les meilleurs résultats. Il faut éviter d'utiliser le format natif de Photoshop (PSD), car Fireworks n'interprète pas correctement les filtres et les effets de son concurrent.

Attention ! pour sauvegarder une image en PNG-8 dans Fireworks, il faut utiliser la fonction "Exporter..." et non la fonction "Enregistrer sous...", sinon l'image sera enregistrée en PNG-24, et sera donc beaucoup plus lourde.

Le rendu de l'image dans les navigateurs. La figure ci-dessous comporte deux carrés de 100 pixels de côté et de couleur rose (R=204, V=B=102). Nous les avons construits en colorant le fond (#CC6666) de deux cellules d'un tableau invisible.

Au centre de chacun des deux carrés, nous avons avons superposé une image PNG (8 bits) de 50 pixels de côté et de la même couleur rose. L'image de gauche a été créée dans Photoshop CS (ce qui correspond à la version 8) et pèse 157 octets. L'image de droite a été créée dans FireWorks MX (ce qui correspond à la version 6) et pèse 169 octets.

+ image PNG de PS + image PNG de FW

Si vous observez cette page dans Internet Explorer, vous constatez que l'image PNG de gauche apparaît comme plus foncée (R=198, V=B=90) que le fond. Si vous utilisez un navigateur à moteur Gecko, vous ne constatez aucune différence. L'image créée dans Photoshop contient donc une information qui incite le navigateur de Microsoft à lui appliquer une correction (de gamma, très probablement), ce qui la rend plus foncée. Le navigateur à moteur Gecko ne réagit pas à cette information. L'image créée dans FireWorks ne contient pas cette information, et les différents navigateurs l'affichent de la même façon. D'ailleurs, si vous ouvrez les deux images dans un éditeur de texte, vous constatez qu'elles ne sont pas identiques.

Conséquence : dans Photoshop, il faut éviter d'utiliser le format PNG quand on découpe une image en morceaux pour la reconstituer ensuite dans une page Web. Les continuités de teinte attendues ne se produiront pas si l'on met bord à bord une image PNG et une image GIF, ou une image PNG et une cellule de tableau dont on a coloré le fond.

 

Le format PNG-8 et l'image hybride

S'il existe un consensus sur le web pour affirmer que l'image PNG-24 n'est pas en mesure de concurrencer l'image JPEG, le match entre l'image GIF et l'image PNG-8 est par contre nettement plus ouvert. Pour certains types d'image au trait (les logos, les saisies d'écran), la seconde est réputée plus performante que la première.

Pour en avoir le coeur net, nous avons enregistré le logo du CERIG dans les deux formats, à partir du dessin d'origine disponible au format Illustrator et pixellisé dans Photoshop (options : couleurs RVB, 72 dpi, lissage). En utilisant les mêmes options (128 couleurs, palette adaptative, ni tramage ni transparence) dans Photoshop 7 et dans Fireworks MX, nous avons obtenu les résultats représentés ci-dessous. Comme vous pouvez le constater, les images au format PNG sont plus légères que celles au format GIF d'une part, et Fireworks compresse mieux le format PNG que Photoshop 7 d'autre part.

Logo CERIG Logo CERIG
image GIF (3524 octets) PS 7 image PNG (3481 octets) PS 7
Logo CERIG Logo CERIG
image GIF (3545 octets) FW MX image PNG (3069 octets) FW MX

Nous avons répété l'expérience avec la petite boite de message (issue d'une application un peu longue à s'exécuter...) représentée ci-dessous (options : palette sélective, 90 couleurs --c'est le minimum pour éviter la formation de bandes dans le dégradé bleu, c'est même un peu limite). Cette fois, l'image PNG l'emporte nettement sur l'image GIF. Le passage du format GIF au format PNG réduit de 34 % le poids du fichier dans Photoshop 7, et de 49 % dans Fireworks MX. Quel succès !

Boite de message Boite de message
image GIF (3461 octets) PS 7 image PNG (2293 octets) PS 7
Boite de message Boite de message
image GIF (3328 octets) FW MX image PNG (1707 octets) FW MX

Quand on l'examine de près, cette boite de message apparaît comme une image hybride. Certains de ses éléments relèvent du dessin au trait (le texte, les formes géométriques simples, l'aplat gris), d'autres de l'image en tons continus (le dégradé bleu, les ombres). Pour vérifier si la représentation de l'image hybride est bien le point fort du format PNG, nous avons créé une image ad hoc, comportant un fond dégradé parfaitement régulier, et un texte simple, comme le montre la figure ci-dessous. Pour éviter la formation de bandes et le tramage par le navigateur, nous avons conservé 256 couleurs. Pour obtenir une bonne compression de l'image PNG, nous avons utilisé le logiciel de dessin Fireworks (la cause de Photoshop 7 étant désormais entendue). Nous voyons que l'image PNG est 39 % plus petite que l'image GIF. Cette fois, il n'y a plus de doute possible : l'image hybride est un point fort du format PNG.

image GIF(4684 octets) FW MX image PNG (2872 octets) FW MX

A l'appui de cette affirmation, nous nous sommes livrés à l'expérience qui consiste à séparer l'image hybride ci-dessus en deux parties. Si nous ne conservons que le texte, alors les deux formats se valent (dans Fireworks tout au moins), comme le montre la figure ci-dessous (en 16 couleurs pour le lissage).

Le texte seul Le texte seul
image GIF(1655 octets) FW MX image PNG (1584 octets) FW MX

Par contre, si de l'image hybride nous ne conservons que le dégradé, le format PNG apparaît comme bien supérieur au format GIF, comme le montre la figure ci-dessous ( en 250 couleurs). C'est donc bien là que réside le point fort du format PNG, et qu'il ne faut pas manquer de l'exploiter.

image GIF(4125 octets) FW MX image PNG (1117 octets) FW MX

En ce qui concerne le format PNG, on remarque que la somme des poids des deux images partielles (le texte et le dégradé, 1584+1117=2701 octets) est inférieure au poids de l'image complète (2872 octets). Nous sommes donc tentés de restituer l'image complète par superposition des deux images partielles. Pour ce faire, nous utilisons un tableau invisible, le dégradé étant utilisé comme image de fond de cellule. Le fond de l'image contenant le texte est déclaré transparent (ce qui fait croître son poids de 1584 à 1590 octets), puis l'image est affichée dans la cellule. Comme le montre la figure ci-dessous (à gauche), ce qui devait arriver -- le phénomène de halo accompagné de crénelage -- est arrivé ! Mieux vaut traiter le texte en tant que texte, comme le montre la figure ci-dessous (à droite). Encore faut-il être sûr que la police correspondante est bien présente sur la machine de l'internaute -- ce qui est présentement le cas puisque le texte est écrit en Times New Roman.

CERIG
Fond PNG (1117 octets)+
image PNG (1590 octets)
Fond PNG (1117 octets)+texte

On peut encore faire mieux ! L'image qui sert de fond de cellule n'a pas besoin d'avoir 60 pixels de haut -- un seul pixel suffit, puisque le navigateur se charge de paver la cellule. La taille de l'image PNG baisse alors d'une centaine d'octets. Enfin, on peut diminuer le nombre de couleurs sans faire immédiatement apparaître des bandes, ce qui permet de gagner encore quelques centaines d'octets... Certains webmestres se livrent ainsi à une véritable chasse à la mort en ce qui concerne les octets superflus.

Enfin, en multipliant les essais on s'aperçoit qu'un autre facteur intervient dans la compétition GIF / PNG : la taille de l'image. Plus l'image possède de grandes dimensions, plus le format PNG est favorisé. Inversement, pour les très petites images (un bouton, par exemple), le format GIF est presque imbattable, comme nous l'avons vu plus haut.

 

L'avenir du format PNG sur le web

Le format PNG peut-il réellement détrôner le format GIF sur le web ? Ses plus ardents défenseurs avancent les arguments suivants :

A notre avis, en ce qui concerne le web, il n'y a rien là d'essentiel. C'est pourquoi les pessimistes vous diront que le rôle principal du format PNG a été de servir de recours potentiel, pour le cas où Unisys aurait poussé sa politique de licence à des niveaux prohibitifs. L'expiration du brevet Unisys enlève donc sa raison d'être au format PNG, qui est voué à disparaître -- car de plus il ne gère pas les animations. Les optimistes, bien sûr, vous diront que c'est le format GIF qui va céder la place au format PNG.

Pour les gens raisonnables, qui ne se targuent pas de jouer au gourou, et qui font la chasse aux octets superflus, la compétition entre les deux formats apparaît comme très ouverte. Le format GIF a l'énorme avantage d'être présent depuis longtemps, mais le format PNG peut se développer dans la niche des images hybrides -- celles qui sont intermédiaires entre le dessin au trait et l'image en tons continus. On commence d'ailleurs à trouver des images PNG sur le web en quantité non négligeable, et il nous paraît probable que ce mouvement ira en s'amplifiant.

 

Conclusion

Le format PNG présente des atouts qui devraient lui permettre de se faire une place honorable sur le web. Nous pouvons citer les points suivants :

Par conséquent, l'usage du format PNG devrait se répandre sur le web, en occupant au minimum la niche de l'image hybride. Il ne faut pas s'attendre, cependant, à ce que le format PNG détrône le format GIF dans un avenir prévisible. En effet, il ne fait pas toujours mieux que le format GIF pour les dessins au trait purs (sans tons continus), et souvent un peu moins bien pour les très petites images.

Pour tirer pleinement profit des qualités du format PNG, il faut utiliser un logiciel de dessin qui implémente bien son mode de compression. A notre connaissance, c'est actuellement Fireworks MX (de l'éditeur Macromedia) qui fournit les fichiers les plus légers, suivi de près par Photoshop CS.

En définitive : il est conseillé de tester le format PNG en concurrence avec le format GIF chaque fois que l'on s'apprête à créer pour le web une image du type dessin au trait. On a parfois d'excellentes surprises (voir par exemple le chapitre 9).