在PHP中合并两个透明图像时的异常结果

时间:2011-09-27 19:49:37

标签: php gd alpha-transparency

我想知道我是否做错了什么,或者这是否与我想要的结果一样好。左边的两个PNG都是95x111。机器人的图像周围有5px左右的透明像素填充,但它们合并时似乎会引起问题?

enter image description here

 $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或类似的方法?

2 个答案:

答案 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");