J'utilise cette fonction pour redimensionner des images mais je me retrouve avec une image terrifiante avec un fond noir s'il s'agit d'un GIF ou PNG transparent avec alpha, mais cela fonctionne parfaitement pour jpg et png normal.Comment améliorer mon resizer d'image php pour supporter alpha png et GIF transparents
function cropImage($nw, $nh, $source, $stype, $dest) {
$size = getimagesize($source);
$w = $size[0];
$h = $size[1];
switch($stype) {
case 'gif':
$simg = imagecreatefromgif($source);
break;
case 'jpg':
$simg = imagecreatefromjpeg($source);
break;
case 'png':
$simg = imagecreatefrompng($source);
break;
}
$dimg = imagecreatetruecolor($nw, $nh);
switch ($stype)
{
case "png":
imagealphablending($dimg, false);
imagesavealpha($dimg, true);
$transparent = imagecolorallocatealpha($dimg, 255, 255, 255, 127);
imagefilledrectangle($dimg, 0, 0, $nw, $nh, $transparent);
break;
case "gif":
// integer representation of the color black (rgb: 0,0,0)
$background = imagecolorallocate($simg, 0, 0, 0);
// removing the black from the placeholder
imagecolortransparent($simg, $background);
break;
}
$wm = $w/$nw;
$hm = $h/$nh;
$h_height = $nh/2;
$w_height = $nw/2;
if($w> $h) {
$adjusted_width = $w/$hm;
$half_width = $adjusted_width/2;
$int_width = $half_width - $w_height;
imagecopyresampled($dimg,$simg,-$int_width,0,0,0,$adjusted_width,$nh,$w,$h);
} elseif(($w <$h) || ($w == $h)) {
$adjusted_height = $h/$wm;
$half_height = $adjusted_height/2;
$int_height = $half_height - $h_height;
imagecopyresampled($dimg,$simg,0,-$int_height,0,0,$nw,$adjusted_height,$w,$h);
} else {
imagecopyresampled($dimg,$simg,0,0,0,0,$nw,$nh,$w,$h);
}
imagejpeg($dimg,$dest,100);
}
Exemple: cropImage("300","200","original.png","png","new.png");
J'utilise PHP 5.3.2 et la bibliothèque GD fourni (compatible 2.0.34)
Comment faire soutenir la transparence? J'ai ajouté imagealphablending()
et imagesavealpha
mais cela n'a pas fonctionné. Ou atlast y at-il d'autres classes similaires?
Merci