2013-03-06 142 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