如何合并两个PNG文件(其中一个带透明度)?

3
我希望能创建一个图像,将头像和另一幅图像叠加在一起。 我想使用的被禁止的图片 (我想叠加的图像)
不同的头像具有不同的宽度和高度,我想让PHP脚本根据头像的大小来“拉伸”banned.png,覆盖整个头像。
这是我目前用于将头像转换为灰度图像并新建图像的脚本:
function ImageToGreyscale($imagepath, $username){
$image_1_file = $imagepath.$username.'.png';    
$image_2_file = $imagepath.'/scripting/banned.png';
$image_1_size = getimagesize($image_1_file);
$image_1_w = $image_1_size[0];
$image_1_h = $image_1_size[1];
$image_1 = imagecreatefrompng($image_1_file);
$image_2 = imagecreatefrompng($image_2_file);
imagealphablending($image_1, true);
imagesavealpha($image_1, true);
imagefilter($image_1, IMG_FILTER_GRAYSCALE);
imagecopy($image_1, $image_2, 0, 0, 0, 0, $image_1_w, $image_1_h);
imagepng($image_1, $imagepath.$username.'_banned.png');
imagedestroy($image_1);

我想把红色的“禁止”覆盖在它上面。

这是我想要的结果:

原始图片

(原始)

编辑后的图片

(编辑后)

你能帮忙做这个吗?


你尝试过这个吗?http://php.net/manual/zh/function.imagecopymerge.php - Rizki Hadiaturrasyid
这可能是一个XY问题。如果您在网页上显示此内容,使用CSS覆盖不是更简单和更快的方法吗? - James Monger
1个回答

1

是的,这个方法可以工作,但你需要根据自己的需求检查和调整坐标。

$image_1 = imagecreatefrompng('girl.png');
$image_2 = imagecreatefrompng('banned.png');
imagealphablending($image_1, true);
imagesavealpha($image_1, true);
imagecopy($image_1, $image_2, 100, 100, 100, 100, 100, 100);
imagepng($image_1, 'image_3.png');
imagedestroy($image_1);

输出 1 输入图片描述

答案 2 如预期输出,可以尝试其他图片

$image_1_file = 'girl.png';    
$image_2_file = 'banned.png';
$image_1_size = getimagesize($image_1_file);
$image_2_size = getimagesize($image_2_file);
$image_1_w = $image_1_size[0];
$image_1_h = $image_1_size[1];
$image_1 = imagecreatefrompng($image_1_file);
$image_2 = imagecreatefrompng($image_2_file);
imagealphablending($image_1, true);
imagesavealpha($image_1, true);
imagefilter($image_1, IMG_FILTER_GRAYSCALE);
imagecopyresampled($image_1, $image_2, 0, 0, 0, 0, $image_1_w, $image_1_h, $image_2_size[0], $image_2_size[1]);
imagepng($image_1,'girl_banned.png');

输出 2 输入图像描述


我不确定,但我觉得我做错了什么。 这是我的当前结果:https://i.imgur.com/GYSx9xc.png我已经更新了主贴,附上了我的新代码。 - ChrisX930
1
请检查已编辑的答案,现在我已按预期更改并使用其他图像进行检查。 - Rasa Mohamed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接