PHP GD 库中的图像透明度

Posted

技术标签:

【中文标题】PHP GD 库中的图像透明度【英文标题】:Image transparency in PHP GD library 【发布时间】:2011-09-14 15:07:47 【问题描述】:

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

Result should look like this

我尝试以不同的方式做这件事,但我无法达到预期的结果。

提前谢谢你;)

【问题讨论】:

您使用了哪些 GD 函数,采用了哪种方法? 在大多数情况下我使用 imagecopy() 和 imagecopymerge(),有几次我得到的图像完全空白,有时是黑色,我真的是 GD 的菜鸟) 【参考方案1】:

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

不幸的是,无法为 imagecopymerge() 强制使用 alpha 乘数,所以这只会让你走到一半——不方便的选项包括在你想要降低透明度的图像部分重复 imagecopymerge() 调用,在两者之间进行选择几个源图像取决于您要使用的透明度级别,或者逐个像素地浏览图像,这非常慢。

如果您没有使用 image* 函数,请考虑改用 ImageMagick。它更加健壮。

【讨论】:

【参考方案2】:

我这样做了:

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

希望对你有帮助!

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于PHP GD 库中的图像透明度的主要内容,如果未能解决你的问题,请参考以下文章

PHP GD从创建的PNG修剪透明像素

使用 GD 将图像旋转 90 度 [关闭]

PHP/GD:如何处理 jpg 透明度?

PHP GD图像透视图

如何使用 GD 使用 PHP 创建透明背景?

使用gd在php中调整图像大小后的黑色背景