用PHP imagecopy合并两个PNG图像不起作用
问题描述:
这里有一个简单的例子,我不能使它工作。用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);
答
尝试类似这样的东西。
// 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透明的颜色填充。
之后,像以前一样将白色像素添加到一个像素,将黑色像素添加到另一个像素。然后合并它们。