使用 PHP imagecopy 合并两个 PNG 图像不起作用

Merging two PNG images with PHP imagecopy does not work

这是一个我无法让它工作的简单示例。

我创建了 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);

尝试这样的事情。

// 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 允许透明度,然后使用 imagecolorallocatealpha 填充透明颜色。

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