每当我在具有透明度的PNG上调用PHP GD的imagecrop()时,它会将透明部分变为黑色而不是保持它。
我最近写了一个函数来缩放透明PNG,同时保持透明度(见下文),所以我理解使用imagecopyresampled等。
function scale_png($image, $resize_w = FALSE, $resize_h = FALSE, $alpha = 127)
{
$src_w = imagesx($image);
$src_h = imagesy($image);
if (! $resize_w) {$resize_w = $src_w;}
if (! $resize_h) {$resize_h = $src_h;}
$output = imagecreatetruecolor($resize_w, $resize_h);
imagealphablending($output, FALSE);
imagesavealpha($output, TRUE);
$transparent = imagecolorallocatealpha($output, 255, 255, 255, $alpha);
imagefilledrectangle($output, 0, 0, $resize_w, $resize_h, $transparent);
imagecopyresampled($output, $image, 0, 0, 0, 0, $resize_w, $resize_h, $src_w, $src_h);
return $output;
}
上面的这个函数工作正常,但是当我也尝试在同一个PNG上做imagecrop()时,这就是我得到黑色背景。
是否有成功执行此作物的简单方法?我似乎无法找到任何好的例子。
我宁愿不必像上面那样编写另一个复杂函数,以便在可能的情况下使用x,y,w,h和imagecopyresampled()裁剪图像,因为它是一个主要的球疼。 / p>
那里的任何GD boffins都在向我传授他们宝贵的知识?
答案 0 :(得分:0)
我理解的方法在这里没有什么复杂的,你必须在执行裁剪之前保存alpha通道。
$img = imagecreatefrompng("./cover.png");
imagealphablending($img, false);
imagesavealpha($img, true);
$resource = imagecrop($img, ['x' => 0, 'y' => 0, 'width' => 500, 'height' => 500]);