LinuxÉdu-Québec

Accueil À propos de nous Contact Plan du site
Accueil du site > Applications > graphisme > Des PNG transparents... même pour IE !

Le mardi 25 janvier 2005, par Benoit St-André, Patrice Levesque

Des PNG transparents... même pour IE !

Beaucoup de gens n’utilisent pas l’excellent format graphique PNG (le successeur libre du format GIF), surtout parce qu’Internet Explorer ne supporte pas bien la transparence de ce format (malgré le fait que la spécification du PNG est connue depuis... IE 4.0 !).

En fait, Internet Explorer supporte très bien une classe de fichiers PNG : les fichiers indexés, avec un seul niveau de transparence (complètement transparent ou complètement opaque).

En revanche, Internet Explorer n’affiche pas correctement les images PNG avec un canal alpha (256 niveaux de transparence).

Voici une façon de transformer les PNG avec un canal alpha pour qu’ils deviennent visibles correctement sous IE. Son seul défaut est que cela diminue le nombre de couleurs possibles de l’image à 256. Par contre, il ne faut pas oublier que le GIF est aussi limité à 256 couleurs. Cependant, le format PNG est complètement libre de tout brevet, contrairement au GIF.

Cette astuce est une traduction de l’article "Fixing transparent PNGs" de Wikimédia. Nous allons utiliser Gimp pour le faire. Cette ressource contient aussi la méthode AlphaImageLoader qui sous certaines conditions et compromis permet d’afficher correctement les images PNG avec un canal alpha sans la méthode décrite ici.

L’idée derrière ce truc consiste à incorporer à l’image la couleur d’arrière-plan sur laquelle cette image sera affichée, permettant ainsi de transformer la transparence en tons de la couleur d’arrière-plan.

Les saisies d’écran ci-dessous sont faites avec Gimp 2.0.

1- Ouvrir le PNG transparent avec Gimp. Créer un calque transparent et le placer à l’arrière de l’image.

2- Remplir le calque transparent avec la couleur grise #eeeeee. Cette couleur fonctionne bien avec un arrière-plan brillant, comme le blanc ; si l’image doit être affichée sur un fond noir, utiliser #000000, et ainsi de suite.

3- Se placer sur le calque supérieur, et fusionner les calques (fusionner le calque vers le bas). Dans l’exemple ci-dessous, on atteint ce menu par un clic-droit sur le calque supérieur.

4- Sélectionner la couleur choisie à l’étape 2 avec l’outil de sélection des régions par couleur.

5- Utiliser la gomme pour enlever toute trace de cette couleur. Soyez prudent, dans l’exemple ci-dessous, on voit que certaines parties de l’intérieur de l’image sont sélectionnées. La gomme peut donc les atteindre, dans l’exemple nous les avons contournées.

6- Convertir l’image qui est toujours en 24 bits en image indexée. Menu Image-> Mode-> Couleur indexées. Appuyez sur Ok pour confirmer. Vous pouvez choisir de ne pas utiliser de tramage couleur si le résultat vous satisfait : l’image utilisera moins d’espace stockage et donc moins de temps de transmission.

Voilà ! Votre image paraît maintenant transparente, et a conservé une certaine qualité depuis l’original. Bien sûr ce n’est pas parfait, pour que ça le soit, IE devrait suivre les standards comme les produits Mozilla (Firefox par exemple), Opera, Konqueror, Safari qui supportent sans problème les PNG transparents 24 bits qui sont bien entendu de bien meilleure qualité.

P.-S.

Voir aussi l’article de Gilles Jobin au sujet de La transparence

16 Messages de forum

  • 4 février 2005 23:38, par R. Ouellette

    Le fait que IE n’affiche pas la transparence et la couche alpha des images au format png ne devrait pas nous obliger à utiliser d’autres formats d’images. Mais je ne suis pas davantage d’accord sur la modification de l’image pour la rendre conforme au fureteur qui ne sait pas reconnaître des normes. C’est à IE de s’adapter aux normes du W3C, pas l’inverse.

    D’ailleurs il existe une méthode pour afficher correctement des png dans IE SANS altérer le format png. C’est tordu, ça ne fonctionne peut-êtrte pas à tous les coups, mais voici le lien : http://ptaff.ca/xhtml/ vers le milieu de la page.

    Je termine en signalant que la transparence et la couche alpha sont, de toute façon, rarement utilisées dans une image png.

    Raymond

  • 2 mars 2005 17:50, par yod

    Je termine en signalant que la transparence et la couche alpha sont, de toute façon, rarement utilisées dans une image png.

    Euh... je suis un peu surpris par ta remarque ! au contraire, les png transparents permettent de régler assez simplement des problèmes d’intégration d’un bout de gfx avec un fond un peu complexe...

  • 2 mars 2005 19:43

    J’aurais dû être plus clair ;-) Un amateur de png (dont je suis) utilisera les possibilités de ce superbe format à plein et vive la couche alpha !

    Mais la plupart des images vues dans l’Internet, même les png, n’utilisent pas la transparence dans toutes ses possibilités : le concept de la couche alpha est nébuleux pour la plupart des gens, même chez les créateurs d’images qui utilisent surtout le format jpeg (le jpeg ne gère pas la couche alpha).

    Les images de l’Internet sont rarement des images qui font appel à une transparence progressive. On connaît tous le format gif (à éviter) qui gère une transparence brutale : transparence totale ou opacité totale, pas de milieu. Le png, outre les 256 tons de rouge, les 256 tons de vert et les 256 tons de bleus pour chaque pixel, ajoute 256 « tons » de transparence de 00 (transparence totale) à ff en hexadécimal (opacité complète).

    Donc mon propos voulait signaler que les images png vues dans l’Internet sont, la plupart du temps, peu complexe en terme de couche alpha parce que cette particularité est souvent inconnue.

    Enfin, je suggère d’essayer Sodipodi, créez une forme, remplissez-la d’une couleur en dégradé et appliquez une couche alpha en dégradé. Vous saisirez tout de suite les possibilités incroyables du format png si bien affichée dans les fureteurs basés sur le moteur de rendu Gecko (Mozilla, Firefox, Konqueror, Galeon...)

    Raymond

  • 2 mars 2005 20:02, par Patrice Levesque

    « moteur de rendu Gecko (Mozilla, Firefox, Konqueror, Galeon...) »

    Konqueror utilise le moteur KHTML, tout comme Safari ; Firefox, Mozilla, Galeon, Camino, Skipstone, Epiphany, Netscape >=6 utilisent Gecko

    Nonobstant cette correction, tous les navigateurs modernes rendent correctement les PNG avec canal alpha. Désolé, MSIE ne fait pas partie des navigateurs modernes. Date de 2001 ; les dernières améliorations significatives sur MSIE datent même de la version 5.0. La rustine SP2 pour MSIE6 ne change strictement rien au rendu des pages, toujours les mêmes déficiences... et toujours une aussi grande part de marché paralysant tout possibilité de progrès sur le web.

    On devra donc encore s’abstenir d’utiliser PNG avec canal alpha sur le web pour bon nombre d’années...

  • 27 mars 2005 15:40, par Patrice Levesque

    Une autre méthode peut être employée lorsque le fond sur lequel sera affiché le PNG est constitué d’une couleur unie. On peut même combiner avec la méthode décrite plus haut si on veut.

    Il s’agit d’utiliser la propriété bKGD qui ajoute une couleur de fond « suggérée » au PNG ; cette couleur est utilisée lorsque le rendu avec transparence ne peut s’effectuer (par exemple avec le fameux navigateur obsolète).

    Très simplement, avant de sauvegarder, sélectionner comme couleur d’arrière-plan la teinte choisie (dans la fenêtre principale de gimp, là où on choisit sa couleur d’avant-plan et d’arrière-plan). En sauvegardant le PNG, cocher l’option de couleur d’arrière-plan.

    Voilà !

  • 1er avril 2005 11:52, par badgers

    Pour compléter votre exposé sur le png et améliorer son affichage avec IE le diablotin, il faut recourir à un petit javascript dont les résultats sont impressionnant : Avec ce script on reussi un lissage presque parfait. Je veux pas spécialement prendre la défense de Bilou le pont, mais vu que son browser est de partout malheureusement, autant servir du travail soigné pour tous bon courrage à tous....

    <script language="JavaScript">
    function IE_CorrectAlpha_PNG(){
    for(i=0; i<document.images.length; i++){
    img = document.images[i];
    imgExt = img.src.substring(img.src.length-3, img.src.length);
    imgExt = imgExt.toUpperCase();
    if (imgExt == "PNG"){
    imgID = (img.id) ? "id='" + img.id + "' " : "";
    imgClass= (img.className) ? "class='" + img.className + "' " : "";
    imgTitle= (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' ";
    imgStyle= "display:inline-block;" + img.style.cssText;
    if (img.align == "left") { imgStyle = "float:left;" + imgStyle; } else if (img.align == "right"){ imgStyle = "float:right;" + imgStyle; }
    if (img.parentElement.href) { imgStyle = "cursor:hand;" + imgStyle; }
    strNewHTML = '<span '+imgID+imgClass+imgTitle+' style="width:'+img.width+'px; height:'+img.height+'px;'+imgStyle+';'+'filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\''+img.src+'\', sizingMethod=\'scale\');"></span>';
    img.outerHTML = strNewHTML;
    i = i-1;
    }}}
    window.attachEvent("onload", IE_CorrectAlpha_PNG);
    </script>
  • 1er avril 2005 12:32, par Patrice Levesque

    Poisson d’avril ?

    Le script plus haut (par badgers) ne touche pas aux propriétés du PNG. Si on abstrait les erreur de syntaxe dans ce code, celui-ci :

    * Ajoute un attribut « title » à l’image, en copiant le contenu de l’attribut « alt ». Mauvais : les deux attributs n’ont pas le même but - « alt » ne sert pas à créer des tooltips ;

    * Transforme les attributs « align » en propriétés de float CSS (quel intérêt ?) ;

    * Permet au pointeur de souris d’afficher une petite main lorsque l’image est enfant immédiat d’un hyperlien (ce n’est pas déjà le cas ?) - en utilisant du CSS propriétaire à MSIE.

    Bref, ce script m’apparait potentiellement nocif pour les navigateurs non-IE, superflu et dommageable.

  • 12 avril 2005 04:18, par Laurent

    D’accord avec Raymond, c’est à M$IE de s’adapter... et non l’inverse.

    A titre personnel, j’utilise la couche alpha pour obtenir une belle transparence sur mes images PNG dans les sites internet que je réalise. Ce format est incomparable avec le GIF de par sa qualité. La finition du site est aussi accrue et fort utile si par exemple le fond est constitué d’un dégradé de couleurs.

    En contre partie, je pose en début de site un advertissement du style "ATTENTION : ce site utilise des images au format PNG à fond transparent, nous déconseillons donc une navigation sous Internet Explorer".

    Enfin, le tutoriel ci-dessous est bien. Il est des plus intéressant mais faire du PNG pour obtenir le même résultat que du GIF... je n’en vois pas trop l’intérêt mise à part pour des questions de liberté ou non du format.

  • 18 mai 2005 07:43, par Flameche
    J’utilise Internet Explorer et depuis quelques jours je ne peux plus voir les images en png !!! A la place s’afiche une petite croix, c’est très embetant puisque j’enregistre toutes mes images au format png puis je les utilise pour mon site...j’ai tout essayé et je ne vois toujours pas ces images et pourtant j’arrive encore à en créer. Quelqu’un saurait comment faire pour que je puisse à nouveau voir ces images pleaaaaaze ????? :’(
  • 13 juin 2005 13:50, par Sil

    J’ai eu exactement le même problème... c’est ce qui m’a poussé à utiliser Mozilla Firefox.

    Cependant, étant webmaster, c’est clair que ça me cause de sacré problème lorsque je développe mes pages et que je souhaite qu’elles soit accessibles aux différents navigateurs...

    Si quelqu’un possède donc une solution à ce problème, qu’elle en fasse part.

  • 13 juin 2005 14:30, par Patrice Levesque

    Je m’y connais si peu en systèmes d’exploitation propriétaires, mais peut-être le fichier `pngfilt.dll` (qui devrait se trouver dans C :\WINDOWS\SYSTEM\) manque-t-il à l’appel ou a-t-il été corrompu par l’installation d’un logiciel / d’un ver / d’un virus. Ou serait-ce le registre qui est corrompu ? On ne sait jamais trop...

    Je sais qu’en roulant Internet Explorer sous Wine, si ce fichier est introuvable, le même phénomène apparaît alors j’ai peut-être une piste.

  • 16 août 2005 10:50, par Nicolas
    ça marche nickel, merci
  • 31 août 2005 09:23, par Olivier

    Voici une méthode pour charger des PNG avec canal alpha dans MSIE sans problème... Je l’ai essayé et ça fonctionne bien...

    http://webfx.eae.net/dhtml/pngbehavior/pngbehavior.html

  • 23 novembre 2005 19:07, par jug

    Bonjour...

    Amusante façon de contourner le problème... Mais Ce n’est pas vraiment ce que j’appellerais une solution !

    C’est plutôt courber l’échine et faire le deuil de la transparence...

    Pour aller plus loin, je vous renverrais vers cette autre technique. Point négatifs : ne gère pas les feuilles de styles externes et c’est pour PHP :

    KOIVI PNG Alpha IMG Tag Replacer for PHP http://www.koivi.com

    A+

  • 10 mai 2007 04:14

    Merci pour cette réponse...

    Internet explorer est un réel frein pour les fichier au format PNG.

  • 21 mars 2008 09:44, par golfa
    salut ca va

Applications | LinuxÉdu-Québec | Revue de presse | Projets | Événements - colloques | Réflexion et opinion | Système d’exploitation