2015-04-02 81 views
2

這裏有一個簡單的例子,我不能使它工作。用PHP imagecopy合併兩個PNG圖像不起作用

我用不同的座標點創建了2個2x2px的簡單圖像,我試着用imagecopy合併它。第二張圖片($ stamp)用透明背景正確創建。 因此,我期望在結果圖像(result.png)中看到兩個白點,但事實並非如此。

我嘗試了幾個函數的組合,但沒有結果。

我在這裏錯過了什麼?

<?php 

// create source image 
$src = imagecreatetruecolor(2, 2); 
$white = imagecolorallocate($src, 255, 255, 255); 
$black = imagecolorallocate($src, 0, 0, 0); 

imagesetpixel($src, 0, 0, $white); 
imagepng($src, 'src.png'); 

// create stamp image 
$stamp = imagecreatetruecolor(2, 2); 
imagecolortransparent($stamp, $black); 
imagesetpixel($stamp, 1, 1, $white); 
imagepng($stamp, 'stamp.png'); 

imagedestroy($src); 
imagedestroy($stamp); 

// merging images 
$src = imagecreatefrompng('src.png'); 
$stamp = imagecreatefrompng('stamp.png'); 

imagealphablending($src, true); 
imagesavealpha($src, true); 

imagecopy($src, $stamp, 0, 0, 0, 0, 2, 2); 
imagepng($src, 'result.png'); 

imagedestroy($src); 

回答

1

嘗試類似這樣的東西。

// create stamp image 
$stamp = imagecreatetruecolor(2, 2); 
imagesavealpha($stamp, true); 
$transparent_colour = imagecolorallocatealpha($stamp, 0, 0, 0, 127); 
imagefill($stamp, 0, 0, $transparent_colour); 

$white = imagecolorallocate($stamp, 255, 255, 255); 

imagesetpixel($stamp, 1, 1, $white); 
imagepng($stamp, 'stamp.png'); 

唯一的區別是,你使用imagesavealpha允許透明度創建郵票和src圖像時,則使用imagecolorallocatealpha透明的顏色填充。

之後,像以前一樣將白色像素添加到一個像素,將黑色像素添加到另一個像素。然後合併它們。