PHP GD库中的图像透明度

时间:2011-09-14 15:07:47

标签: php image transparency gd

我需要使用PHP中的GD库从另一个具有不同透明度的PNG图像的4个部分创建PNG图像。例如:

Result should look like this

我试图以不同的方式做这件事,但我没有达到预期的效果。

提前谢谢你;)

3 个答案:

答案 0 :(得分:2)

使用imagecreatefrompng()加载图像。使用imagecreatetruecolor()创建一个真彩色图像,然后使用imagecolorallocatealpha()和imagefill()将其设置为完全透明。然后使用imagealphablending()为源图像和目标图像设置alpha混合模式。在此之后,您可以使用imagecopymerge()来复制带有alpha的图像。

不幸的是,不可能为imagecopymerge()强制执行alpha乘数,所以这只会让你只有一半 - 不方便的选项包括重复对你希望透明度较低的图像部分的imagecopymerge()调用,选择几个源图像取决于您要使用的透明度级别,或逐像素地浏览图像,这很不方便。

如果您未与图像*功能结合,请考虑使用ImageMagick。它更强大。

答案 1 :(得分:0)

我这样做了:

$output = imagecreatetruecolor([width], [height]);
imagesavealpha($output , true);

$trans_colour = imagecolorallocatealpha($output , 0, 0, 0, 127);
imagefill($output , 0, 0, $trans_colour);

现在图像是透明的:)

整个剧本:

$output = imagecreatetruecolor([width], [height]);
imagesavealpha($output , true);

$trans_colour = imagecolorallocatealpha($output , 0, 0, 0, 127);
imagefill($output , 0, 0, $trans_colour);

header('Content-Type: image/png');

imagepng($output);

imagedestroy($output);

希望它有所帮助!

答案 2 :(得分:0)

这对我来说同时适用于gif和png(当然,如果使用该图像类型,请将此示例中png的每个引用更改为gif)。

$virtual_image = imagecreatetruecolor($desired_width, $desired_height);
$colour = imagecolorallocate($virtual_image,255,255,255);
imagefill($virtual_image , 0, 0, $colour);
imagealphablending($virtual_image,true);
imagesavealpha($virtual_image , true);

//the next line only if you're resizing to a new $width/$height, otherwise leave this line out
imagecopyresampled($virtual_image, $source_image, 0, 0, 0, 0, $desired_width, $desired_height, $width, $height);

header('Content-Type: image/png');

if (imagepng($virtual_image)) imagedestroy($virtual_image);