2015-04-02 86 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透明的颜色填充。

之后,像以前一样将白色像素添加到一个像素,将黑色像素添加到另一个像素。然后合并它们。