1

我尝试了两个不同的图像,但仍然将 alpha/transparency 替换为黑色:

我已经注释掉 bc jpegs的原始代码imagejpeg不支持透明度并替换为imagepng.

这是我包含 alpha 的原始测试图像:

在此处输入图像描述

在此处输入图像描述

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

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

2 回答 2

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 不会自动执行此操作:

于 2013-06-28T21:21:19.630 回答
2

您需要调用imagesavealphaimagealphablending函数。

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

于 2013-06-28T21:20:27.610 回答