2011-07-04 107 views
0

我正在從另外兩個人創建一個PNG圖像。使用GD與PHP合併圖像

圖片A和B具有相同的尺寸,它們都是200x400px。最後的圖像是一樣的。

我在PHP中使用GD庫。

所以我的想法是從我的原始PNG-8創建一個PNG-24,然後使用顏色透明度,最後將第二個圖像複製到 這個新的PNG-24。從PNG-24將PNG-8時,有透明色的問題出現在第一步反正:

這是爲了獲得原始PNG-8,它的尺寸:

$png8 = imagecreatefrompng($imageUrl); 
$size = getimagesize($imageUrl); 

現在我創建新PNG和填補它的背景爲綠色(不存在的圖像):

$png24 = imagecreatetruecolor($size[0], $size[1]); 
$transparentIndex = imagecolorallocate($png24, 0x66, 0xff, 0x66); 
imagefill($png24, 0, 0, $transparentIndex); 

這是爲了使綠色透明:

imagecolortransparent($png24, $transparentIndex);  

然後我的PNG8複製到PNG-24:

imagecopy($png24, $png8, 0, 0, 0, 0, $size[0], $size[1]); 

所以這裏的問題:原來的PNG-8看起來不錯,但它周圍的原始圖像中的形狀的綠色邊框。真的很難解釋。似乎綠色背景的某些部分留在剩餘的PNG中。

我該怎麼辦?

在此先感謝

最好的問候,

費爾南多

回答

1

我遇到了一些問題,之前PNG透明度,並能以這種模式來解決這些問題:

// allocate original image to copy stuff to 
$img = imagecreatetruecolor(200, 100); 

// create second image 
$bg = imagecreatefrompng('bg.png'); 

// copy image onto it using imagecopyresampled 
imagecopyresampled($img, $bg, 0, 0, 0, 0, 200, 100, 200, 100); 
imagedestroy($bg); 

// create third image 
// do same routine 
$fg = imagecreatefrompng('fg.png'); 
imagecopyresampled($img, $fg, 50, 50, 0, 0, 50, 50, 50, 50); 
imagedestroy($fg); 

// output image 
imagepng($img); 
imagedestroy($img); 

我想我和你的唯一區別是imagecopy()imagecopyresampled()。我似乎記得,雖然在不久前還有問題。你可以看到我用這種模式的這裏的圖像的一個例子:http://www.ipnow.org/images/1/bggrad/bg4/yes/TRANSIST.TTF/8B0000/custombrowserimage.jpg(我分配一個空白圖像,複製背景圖像,覆蓋有透明覆制)

+0

我可以結合兩個圖像下面的代碼。我現在遇到的問題是其中一個圖像有陰影。現在,當我使用imagecopy或imagecopyresampled時,它似乎像這個陰影(灰色降級)與我在背景中設置的透明顏色相結合,導致最終圖像幾乎完美,但被前面設置的背景透明顏色包圍,醜陋綠色。 當我得到這個,我嘗試使用透明的PNG,但這些像素又是一個問題:我得到某種模糊。這聽起來像是一個圖像問題,與編程無關。 –