我有一段代码,
它的想法是创建一个具有定义高度/宽度的透明画布,因此我可以在其中放置 jpg/png/gif。
但是,如果它在其中放置具有透明度的 PNG,则需要为其保留透明度。
这是代码示例
header("Content-type: image/png");
$canvas = imagecreatetruecolor($maxWidth, $maxHeight);
$image = $_GET['file'];
$leftOffset = ($maxWidth / 2) - ($width / 2);
$topOffset = ($maxHeight / 2) - ($height / 2);
$quality = (isset($_GET['quality'])) ? (int) ceil($_GET['quality'] / 10) : ceil($DEFAULT_QUALITY / 10);
$quality = $quality == 10 ? 9 : $quality;
switch($mime){
case "image/jpeg":
$image = imagecreatefromjpeg($image);
$red = imagecolorallocate($canvas, 0, 255, 0);
imagecolortransparent($canvas, $red);
imagefill($canvas, 0, 0 ,$red);
break;
case "image/gif":
$image = imagecreatefromgif($image);
break;
case "image/png":
$background = imagecolorallocate($canvas, 255, 0, 0);
imagecolortransparent($canvas, $background);
imagealphablending($canvas, false);
imagesavealpha($canvas, true);
$image = imagecreatefrompng($image);
break;
}
imagecopyresampled($canvas, $image, $leftOffset, $topOffset, 0, 0, $width, $height, $width, $width);
imagepng($canvas, null, $quality);
imagedestroy($canvas);
然而问题是,画布仍然是黑色的,而图像周围的框区域是透明的。
下图演示了这一点,石灰绿色是主体 {背景:石灰;},因此您可以看到透明区域
我尝试在 imagecreatetruecolor 之后使用透明颜色
$red = imagecolorallocate($canvas, 255, 0, 0);
imagecolortransparent($canvas, $red);
imagefill($canvas, 0, 0 ,$red);
如果 .png 具有淡入淡出效果,它会在其周围发出令人讨厌的红色光芒,其中颜色不再是 255、0、0
有什么建议么?
谢谢