如何在保持透明度的同时在PNG上使用PHP GD imagecrop?

时间:2016-03-17 15:34:02

标签: php image png transparency crop

每当我在具有透明度的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都在向我传授他们宝贵的知识?

1 个答案:

答案 0 :(得分:0)

我理解的方法在这里没有什么复杂的,你必须在执行裁剪之前保存alpha通道。

$img = imagecreatefrompng("./cover.png");
imagealphablending($img, false);
imagesavealpha($img, true);
$resource = imagecrop($img, ['x' => 0, 'y' => 0, 'width' => 500, 'height' => 500]);