将两个PNG图像与PHP图像复制合并是不起作用的


Merging two PNG images with PHP imagecopy does not work

这里有一个我无法使其工作的简单示例。

我创建了两个简单的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);

试试这样的方法。

// 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');

唯一的区别是,在创建stamp和src图像时,使用imagesavealpha允许透明,然后使用imagecolorallocatelpha填充透明颜色。

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