2011-09-14 125 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);