2013-03-29 53 views
0

這讓我很頭疼。我想合併2個透明的PNG。GD2 - 複製兩個透明圖像導致黑色背景

其中一個是從方形圖像中隨時產生的圓形($源)。 第二個是地圖標記($ marker),帶有一個透明圓以適應第一個後面。

imagepng($ source);和imagepng($ marker);輸出就像人們所期望的那樣。 具有透明背景。

我然後創建一個空的透明圖像的標記的大小將它們兩者一起:

//NEW BLANK TRANSPARENT IMAGE 
$dest = imagecreatetruecolor(50, 61); 
$transparent = imagecolorallocatealpha($dest, 0, 0, 0, 127); 
imagefill($dest, 0, 0, $transparent); 
imagealphablending($dest, true); 
imagesavealpha($dest,true); 

//COPY THE CIRCLE  
imagecopy($dest, $source, 5, 5, 0, 0, 41, 41); 

//AND THE MARKER ON TOP 
imagecopy($dest, $marker, 0, 0, 0, 0, 50, 61); 

在結果中,圓圈顯示爲與內圓上的黑色正方形。 我嘗試了很多imagealphablending和imagesavealpha的組合,在$ source和$ dest上都沒有任何效果。

如何刪除黑色方塊,並將結果中的$ source透明,因爲它在合併之前?

+0

我剛剛用2張透明圖片試過了你的代碼,它對我很有用。用'imagecolortransparent($ dest,$ blackColor)試過;'? – Uby

+0

剛剛做到了。儘管它可能與圖片中的其他黑人發生衝突。仍然沒有工作。 – Bruno

+0

這裏的問題是在圓形面具。它可以很好地處理它自己的內容,但是當它複製到另一個圖像上時,它會爲其添加黑色背景。 – Bruno

回答

0

的這裏的問題是:

要產生上飛了一圈,我創建一個圓形掩蔽,使一切透明的,使得它的紅色,然後使紅色透明。 這與imagesavealpha(true)不兼容,因爲它表示gd引擎完全忽略透明色並改爲保存整個alpha通道。

合併兩個圖像時,一度透明的顏色現在變成黑色。

我的案例的解決方案是分析每像素的像素,並將其複製到空白圖像,如果它使用圓形方程在圓內。