2011-09-14 126 views
2

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

Result should look like this

我试图做这件事情的方式不同,但我coudn't达到预期的效果。

预先感谢您;)

+0

你使用了哪些GD函数,以及哪种方法? –

+0

我在大多数情况下使用imagecopy()和imagecopymerge(),几次我得到的图像完全是空白的,有时是黑色的,我真的在GD) – micnic

回答

2

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

不幸的是,为imagecopymerge()强制执行一个alpha乘法器是不可能的,所以这只会让你只有一半 - 不方便的选项包括在图像的那些部分重复调用imagecopymerge()调用,取决于您要使用的透明度级别,还是逐像素地逐像素地处理多个源图像之间的数据,这不便慢。

如果您未结合图片*功能,请考虑使用ImageMagick代替。它更健壮。

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

希望它能帮助!

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