图像透明度在PHP GD库


Image transparency in PHP GD library

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

结果应该是这样的

我试过用不同的方法做这件事,但都达不到预期的结果。

提前感谢;)

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

不幸的是,它不可能强制imagecopymerge()的alpha倍增器,所以这只会让你只完成了一半——不方便的选项包括重复imagecopymerge()调用图像的那些部分你想要不太透明,根据你想要使用的透明度级别在几个源图像之间进行选择,或者逐个像素地浏览图像,这是不方便的慢。

如果你没有使用image*函数,可以考虑使用ImageMagick。

我这样做了:

$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);

希望有帮助!

这对我来说都适用于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);