使用 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 填充透明颜色。
之后,像以前一样将白色像素添加到一个,将黑色像素添加到另一个。然后组合起来。
这是一个我无法让它工作的简单示例。
我创建了 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 填充透明颜色。
之后,像以前一样将白色像素添加到一个,将黑色像素添加到另一个。然后组合起来。