Bonjour,

Je me souvient avoir lu une fois sur le forum qu'il y avait un moyen de changé la couleur par défault (gris 50%) de la transparence des png avec Photoshop ou Gimps.

Je n'ai pas réussi à retrouver l'info, quelqu'un saurait-il la manip à faire?
Modifié par matmat (03 Sep 2008 - 21:06)
Hello,

tweakpng fait ça très bien. Smiley cligne

A+

PS : comme je vois souvent la faute ce n'est pas "quelqu'un serait il" (verbe être) mais "quelqu'un saurait-il" (verbe savoir). Smiley langue
Bonsoir,
Il y a moyen de faire ça avec Photoshop.

Si je ne me trompe pas, il s'agit de faire la manip suivante :
- Enregistrer l'image pour le web
- Sélectionner le type PNG-8 (il me semble que le PNG-24 n'est pas concerné)
- De cliquer la ou les couleurs souhaitées
- Et enfin de cliquer sur le bouton damier dont l'infobulle mentionne : ''Associer la transparence aux couleurs sélectionnées.''

Et voilà Smiley cligne
Merci de vos réponses,

Par contre, à ma grande déception, cela ne marche pas pour pour modifier l'affreux gris des png sous ie6, ou bien j'ai raté une étape?
Modifié par matmat (03 Sep 2008 - 23:44)
IE6 ne gère pas le png24 et remplace les degrés de transparence par un gris en effet. Il faut passer par la propriété filter pour corriger ce problème si ton image est dans ta css :

filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/ton_image.png',sizingMethod='crop');


Sinon des tas de javascripts corrigent plus ou moins bien ce problème. Au hasard :

- ifixpng pour jquery
- les scripts de Dean Edwards
Modifié par Everholt (03 Sep 2008 - 23:56)
Merci Everholt,

Je connais bien ce filtre, mais c'est pour une page ou il y a beaucoup de png, et comme ils sont transparents seulement pour un effet dans un flash, je voulais m'en passer (ça fait quand même pas mal tourner le cpu, voir planter parfois, une cinquantaine de DXImageTransform).

Dans le reste de la page ils sont sur fond blanc donc une transparence blanche par défaut ce serait super, d'où ma question.

Plutôt que javascript, je préféré les behavior pour faire ce travail, en effet ils permettent d'utiliser les sélecteurs css pour indiquer les objets à traiter.
En dehors du behavior ou du javascript, point de salut je crois Smiley cligne
Ou alors mettre le png dans un flash avec
<param name="wmode" value="transparent" />

Lourdingue.
Modifié par Everholt (04 Sep 2008 - 00:30)
matmat a écrit :
Merci de vos réponses,

Par contre, à ma grande déception, cela ne marche pas pour pour modifier l'affreux gris des png sous ie6, ou bien j'ai raté une étape?
Yep ! Pour faire simple : tu ouvres ton image avec tweakpng. Si la ligne bKGD n'existe pas il faut la rajouter (Insert). Ensuite il ne reste plus qu'à modifier la valeur (double clic sur la ligne). Smiley cligne
Modifié par Heyoan (04 Sep 2008 - 07:05)
Hello,

Avec The Gimp, il suffit de cocher la case «Enregistrer la couleur d'arrière-plan» en enregistrant l'image en PNG (faire «Enregistrer sous...» s'il s'agit déjà d'une image PNG, le simple «Enregistrer» ne permet pas de modifier les paramètres PNG de l'image). Bien sûr, il faut que la couleur d'arrière-plan (la couleur secondaire sélectionnée dans la boite à outils) soit sur la couleur souhaitée.

Voilà, je confirme que ça marche très bien, en tout cas. Dans certains cas, ça peut être une solution simple de «dégradation gracieuse» pour IE6.

Cygnus a écrit :
Il y a moyen de faire ça avec Photoshop.

Si je ne me trompe pas, il s'agit de faire la manip suivante :
- Enregistrer l'image pour le web
- Sélectionner le type PNG-8 (il me semble que le PNG-24 n'est pas concerné)
- De cliquer la ou les couleurs souhaitées
- Et enfin de cliquer sur le bouton damier dont l'infobulle mentionne : ''Associer la transparence aux couleurs sélectionnées.''

Ça a pas l'air d'être la même chose... surtout s'il faut passer en PNG-8, auquel cas ça n'a rien à voir.
Ça y est j'ai compris ce qui se passe!,

Effectivement cela marche, et c'est très bon à savoir.

Le problème vient en fait de mon script php qui redimensionne les images, en effet il garde bien la transparence para contre il la recrée grise sous ie!

Voilà la fonction que j'utilise sur ce site, c'est un nouveauté car avant j'en utilisais une autre qui ne gardais pas la transparence:

function resize($img, $w, $h, $newfilename) {

  if(!extension_loaded('gd') && !extension_loaded('gd2')) {
    trigger_error("GD is not loaded", E_USER_WARNING);
    return false;
  }

  $imgInfo = getimagesize($img);

  switch ($imgInfo[2]) {
    case 1: $im = imagecreatefromgif($img); break;
    case 2: $im = imagecreatefromjpeg($img);  break;
    case 3: $im = imagecreatefrompng($img); break;
    default:  trigger_error('Unsupported filetype!', E_USER_WARNING);  break;
  }

  $newImg = imagecreatetruecolor($w, $h);

  if(($imgInfo[2] == 1) OR ($imgInfo[2]==3)){
    imagealphablending($newImg, false);
    imagesavealpha($newImg,true);
    $transparent = imagecolorallocatealpha($newImg, 255, 255, 255, 127);
    imagefilledrectangle($newImg, 0, 0, $w, $h, $transparent);
  }
  imagecopyresampled($newImg, $im, 0, 0, 0, 0, $w, $h, $imgInfo[0], $imgInfo[1]);

  switch ($imgInfo[2]) {
    case 1: imagegif($newImg,$newfilename); break;
    case 2: imagejpeg($newImg,$newfilename,80);  break;
    case 3: imagepng($newImg,$newfilename); break;
    default:  trigger_error('Failed resize image!', E_USER_WARNING);  break;
  }
  return $newfilename;

}


La couleur de fond devrait être donné par imagecolorallocatealpha et 255,255,255 correspond au blanc 127 étant la transparence.

En écrivant ce message je suis en train de me dire qu'une solution pourrais être de rajouter un paramètre a la fonction de tel manière que dans un cas php aplatisse la transparence vers le blanc et dans l'autre pour le flash il la garde.

EDIT : effectivement j'ai essayé et c'est une bonne solution, je met un paramètre "transparency" uniquement dans le php qui génère le xml pour le flash et le problème est réglé! Même pas besoin de retoucher les images.

Par curiosité, quelqu'un connais-t'il la solution en php pour garder la couleur de la transparence?
Modifié par matmat (04 Sep 2008 - 22:40)