Bonjour
J'ai écrit pour mon site une galerie d'images. Pour faire mieux, j'aimerais y mettre de la transparence.
J'ai pour l'instant utilisé l'attribut CSS3 opacity, mais seul mozilla le supporte ! J'aimerais donc mettre des miniatures transparentes en png... (comme les images de cette page : http://www.libpng.org/pub/png/png-rgba32.html(...) )
Les images de la galerie sont au format jpeg, et je les transforme en miniatures au format png en utilisant les fonctions d'image de PHP.
Comment faire pour mettre de la transparence ? (La documentation de php est franchement peu claire là dessus !)
Merci d'avance
# En même temps...
Posté par daggett . Évalué à 1.
Si tu veux utiliser des PNG transparents pour que ça passe aussi sous Internet Explorer, je crois que ça reviendra à peu près au même :)..
[^] # Re: En même temps...
Posté par Pinaraf . Évalué à 2.
Y'a aussi Opera, Konqueror, Safari (tiens, lui je crois qu'il supporte opacity)...
# Hello
Posté par Cali_Mero . Évalué à 1.
http://dean.edwards.name/IE7/(...)
[^] # Re: Hello
Posté par Pinaraf . Évalué à 4.
1- c'est un hack, son fonctionnement n'est pas garanti en cas de mise à jour d'IE
2- utiliser IE7 revient à dire aux visiteurs : "votre IE supporte pas les standards mais bon, c'est pas grave je m'en fous j'utilise des hacks pour qu'il les supporte", alors que j'ai plutôt tendance à dire "IE supporte pas les standards <=> je supporte pas IE"
3- c'est lourd !
4- la formule magique spéciale png est dispo séparement sur de nombreux sites
5- IE supporte pas ma CSS donc la transparence ne lui servira pas
[^] # Re: Hello
Posté par Cali_Mero . Évalué à 1.
1/ Le fonctionnement d'IE lui-même n'est pas garanti en cas de mise à jour, je ne vois pas comment ca pourrait être pire... De plus IE7 est très sélectif dans sa façon d'agir et ne devrait pas faire souffrir les versions futures (plus conformes aux standards ? on peut rêver...) d'IE.
2/ Ca revient à rendre IE un peu moins insupportable en codant "standard" et en espérant que ca passe mieux que par défaut. C'est donc un geste à la fois pour ton visiteur et pour toi (Rappelle toi qu'il y a des gens qui utilisent IE car ils y sont contraints, au travail par exemple...).
3/ C'est ignoré par tous les autres navigateurs vu que c'est inclus comme commentaire conditionnel, une astuce que seul IE prend en compte. Ce n'est donc lourd *que* là ou c'est censé agir. Et ca représente seulement une quarantaine d'octets dans la page, donc l'argument lourdeur me parait pour le moins écorné... (ce n'est pas plus lourd pour le client que les effets de transparence à tire-larigot, ceci dit).
4/ Certes, il y en a d'autres, tu as raison. Mais celle d'IE7 est une de celles qui marchent le mieux pour des raisons que je ne m'attarderais pas à expliquer (trop long).
5/ C'est tout l'intérêt d'IE7 ! Ta CSS passera sans doute mieux qu'elle ne passe maintenant, la transparence en sus.
Bref, bouder IE par conviction, pourquoi pas... mais ca ressemble trop à "optimisé pour X,Y,Z avec 12 plugins et telle résolution", comme raisonnement, je trouve ça archaïque :-) Surtout quand des solutions existent pour améliorer les choses à moindre effort.
# Solution
Posté par Pinaraf . Évalué à 2.
Je vous la fournis (et j'avoue que j'aurais jamais été capable de la trouver seul avec la documentation de PHP !)
function modif_alpha($src , $dest , $alpha){
/*
* webmaster@creatixnet.com - licence bananière
* ("faites de ce code ce que vous voulez...")
*
* Paramètres : $src : fichier source
* $dest : fichier de destination
* $alpha : transparence (entre 0 (opaque) et 127 (transparent))
*
* EX : modif_alpha('image.jpg', 'image.png', 70)
* rend l'image à moitié transparente.
*/
if (file_exists($src)) $size = getimagesize($src);
else return FALSE;
switch($size[2])
{
case 1 :
if (imagetypes() & IMG_GIF)
$pic = imagecreatefromgif($src);
break;
case 2 :
if (imagetypes() & IMG_JPG)
$pic = imagecreatefromjpeg($src);
break;
case 3 :
if (imagetypes() & IMG_PNG)
$pic = imagecreatefrompng($src);
break;
default :
if (preg_match("/\.wbmp$/i", $src) && (imagetypes() & IMG_WBMP))
$pic = imagecreatefromwbmp($src);
}
if (!$pic) return FALSE;
$new=imagecreatetruecolor($size[0], $size[1]);
imagealphablending($new, FALSE);
imagesavealpha ($new, true);
$colors_num = imagecolorstotal($pic);
for($x=0;$x<$size[0];$x++) {
for($y=0;$y<$size[1];$y++) {
$colorat=imagecolorat($pic,$x,$y);
$color = imagecolorsforindex($pic, $colorat);
$r = $color["red"];
$g = $color["green"];
$b = $color["blue"];
$idx=imagecolorallocatealpha($new,$r,$g,$b,$alpha);
imagesetpixel($new,$x,$y,$idx);
}
}
imagepng($new, $dest);
return TRUE;
}
[^] # Re: Solution
Posté par Pinaraf . Évalué à 2.
http://pinaraf.robertlan.eu.org/site/LG3D/galerie.php?photo=normal.(...)
Vous comprendrez en voyant les photos à quel point la transparence est importante : faut pas que la galerie soit trop pitoyable par rapport aux images quand même :p
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.