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

时间:2015-04-02 22:16:41

标签: php image-processing php-gd

这是一个我无法使其发挥作用的简单例子。

我使用不同坐标的点创建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 个答案:

答案 0 :(得分: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');

唯一的区别是你在创建图章和src图像时使用imagesavealpha来允许透明度,然后使用imagecolorallocatealpha填充透明色。

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