2013-03-06 145 views
14

我想在PHP中结合GD进行以下操作。不幸的是,ImageMagick不是一个选项,但这看起来像是一个常见的问题,是一个解决方案,我似乎无法找到它。PHP/GD - 透明背景

我想创建一个透明背景的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); 

上面的代码是我在网上找到的,它与红色填充它,然后让红色透明。同样,这会导致图像中的所有红色变得透明。我可以选择一种不太可能发生的颜色,但我不能保证这一点。

有什么我失踪了吗?这可以解决吗? 感谢您的回复!

回答

26

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

imagealphablending默认为true真彩色图像,所以这并没有什么不同:) 此外,imagecreatetruecolor创建了一个黑色的形象,这是为什么第一段代码使用imagecolortransparent(0); – Spinal 2013-03-06 12:08:05

+0

在这种情况下,我看不到您的问题。我通过在中心画一个黑色的长方形来测试上述情况,它的工作很好,透明度很高。 – 2013-03-06 12:09:32

+0

真的吗?然后,我的设置可能有问题,因为如果我尝试下面的代码,我会看到一个黑色的蓝色矩形! $ image = imagecreatetruecolor(800,600); imagealphablending($ image,true); imagefilledrectangle($ image,50,50,750,550,imagecolorallocate($ image,0,0,128)); header('Content-type:image/PNG'); imagepng($ image); – Spinal 2013-03-06 12:18:27