alpha(透明度)被替换为黑色 - 为什么?

时间:2013-06-28 21:17:51

标签: php image

我尝试了两种不同的图像,但仍然将黑色/ alpha透明度替换为黑色:

使用的原始代码imagejpeg我已经注释掉了b.c. jpegs不支持透明度,而是由imagepng替换。

以下是我的原始测试图片,其中包含alpha:

enter image description here

enter image description here

这是我从php.net测试的解决方案。实际上这会扭曲黑白图像/ w alpha背景。

private function imageCreateTransparent($x, $y) {
    $imageOut = imagecreatetruecolor($x, $y);
    $colourBlack = imagecolorallocate($imageOut, 0, 0, 0);
    imagecolortransparent($imageOut, $colourBlack);
    return $imageOut;
}

2 个答案:

答案 0 :(得分:3)

经过一些尝试,结果是使用imagefill 使用alpha,但你也需要调用imagesavealpha

如果将其包装在函数中,最终代码将如下所示。

function imagecreatealpha($width, $height)
{
    // Create a new image
    $i = imagecreatetruecolor($width, $height);

    // for when you convert to a file

    imagealphablending($i, true);
    imagesavealpha($i, true);

    // Fill it with transparent color (translucent black in this case)
    imagefill($i, 0, 0, 0xff000000);

    return $i;
}

然后像这样使用它:

$i = imagecreatealpha(500, 500);

// Further processing goes here

// Output
header('Content-type: image/png');
imagepng($i);

同样适用于加载具有Alpha透明度的png图像。奇怪的是,PHP并没有自动执行此操作:

答案 1 :(得分:2)

您需要调用imagesavealphaimagealphablending函数。

请参阅:http://www.php.net/manual/en/function.imagesavealpha.php第一个示例。