我想知道我是否做错了什么,或者这是否与我想要的结果一样好。左边的两个PNG都是95x111。机器人的图像周围有5px左右的透明像素填充,但它们合并时似乎会引起问题?
$avatar = imagecreatefrompng("../guy.png");
$borderImg = imagecreatefrompng("../frame.png");
imagealphablending( $borderImg, false );
imagesavealpha( $borderImg, true );
imagecopyresampled($avatar,$borderImg, 0, 0, 0, 0, 95, 111,95, 111);
imagepng($avatar, $newfilenameBig);
我已经尝试了我能想到的imagealphablending和imagesavealpha的每一个组合。当我将$ avatar设置为imagesavealpa = true时,它甚至不会将图像显示为全部,只显示帧。这看起来不奇怪吗? 这是因为我要使用PHP GD吗?
更新:当使用24位模式在PS中手动创建两个图像时,可以实现所需的结果。有没有办法使用imagecopy或类似的方法?
答案 0 :(得分:1)
我认为使用GD的Jaguar库有助于轻松完成这项工作:
例如,创建您想要使用的叠加操作所需的内容 gif,png,jpeg和任何支持的格式:
注意强> 此操作非常快,并且不是基于像素的,并且叠加可以是任何支持 格式和不透明度将被保存
use Jaguar\Canvas,
Jaguar\Transformation;
$transformation = new Transformation(new Canvas('your robots'));
$transformation->overlay(new Canvas('your frame'))
->getCanvas()
->show();
答案 1 :(得分:0)
请尝试以下代码,使其工作正常。
$width = 95; $height = 111; $base_image = imagecreatefrompng("../guy.png"); $top_image = imagecreatefrompng("../frame.png"); imagesavealpha($top_image, false); imagealphablending($top_image, false); imagecopy($base_image, $top_image, 0, 0, 0, 0, $width, $height); imagepng($base_image, "merged.png");