PHP / GD - 透明背景

时间:2013-03-06 12:00:30

标签: php gd transparency

我希望在PHP中与GD结合使用以下内容。不幸的是,ImageMagick不是一个选项,但这似乎是一个常见的问题, 是一个解决方案,我似乎无法找到它。

我想创建一个透明背景的PNG。然后我想在上面画一个矩形,在上面复制一个图像,然后添加一些文字。一种方法如下:

$image = ImageCreateTrueColor (800, 600);
imagecolortransparent ($image, 0); //0 is pure black, the default fill color
imagerectangle (...);
//code to copy an image
imagettftext ($image, ...);
imagepng ($image);

这样可以正常工作,但复制图像的一部分可能是黑色,和/或文本可能是黑色。这也变得透明,这是我想要的东西。

imagefill ($image, 0,0, 0x7FFF0000);
imagetransparent ($image, 0x7FFF0000);

以上代码是我在网上找到的,用红色填充它,然后使红色透明。同样,这会导致图像中的所有红色变为透明。我可以选择一种不太可能出现的颜色,但我无法保证这一点。

有什么我想念的吗?这可以修复吗? 谢谢你的回复!

1 个答案:

答案 0 :(得分:28)

如果你要合并图像,

imagecolortransparent可能不是你想要的,因为单色透明度是令人讨厌的。

相反,请尝试使用透明填充蒙版,如下所示:

<?php
$image = imagecreatetruecolor(100, 100);

// Transparent Background
imagealphablending($image, false);
$transparency = imagecolorallocatealpha($image, 0, 0, 0, 127);
imagefill($image, 0, 0, $transparency);
imagesavealpha($image, true);

// Drawing over
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 25, 25, 75, 75, $black);

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