使用php合并多个透明PNG图像

时间:2011-01-03 14:55:29

标签: php image-processing png

我在将多个透明png合并在一起时遇到了一些问题。 我正在尝试创建一个工具,在屏幕上设计一条皮带,供用户使用 他们选择表带,搭扣和设计折痕。

该工具将三个不同的图像合并为一个,以创建一个预览图像。当我运行下面的代码时,它会创建带子图像,正确添加带扣,但带子图像右侧会出现一个黑色框,看起来与带扣图像大小相同。一世 无法确定问题是什么。

这是我第一次使用php处理图像,所以我可能会忽略这一点。如果有人能帮助我,我将非常感激。提前谢谢!

header('Content-type: image/png');
$strap = imagecreatefrompng("images/straps/DBR.png");
$w = imagesx($strap);
$h = imagesy($strap);

imagealphablending($strap,true);

$buckle = imagecreatefrompng("images/buckles/" . $buckle . ".png");
imagealphablending($buckle,true);

$crease = imagecreatefrompng("images/skull.png");
imagealphablending($crease,true);


imagecopy($strap,$buckle,200,0,0,0,$w,$h);
imagecopy($strap,$crease,0,0,0,0,$w,$h);

 //imagecopy($photo2,$crease,200,0,0,0,$w,$h);
// fill the image background with white

imagepng($strap); 

imagedestroy($strap);
imagedestroy($buckle);

更新:这是我目前的源代码

$strap = imagecreatefrompng("images/straps/DBR.png");
$w = imagesx($strap);
$h = imagesy($strap);

imagealphablending($strap,true);
imagesavealpha($strap, true);


$buckle = imagecreatefrompng("images/buckles/" . $buckle . ".png");

imagealphablending($buckle,false);
imagesavealpha($buckle, true);

$crease = imagecreatefrompng("images/skull.png");

imagealphablending($crease,false);
imagesavealpha($crease, true);

imagecopy($strap,$buckle,200,0,0,0,$w,$h);
imagecopy($strap,$crease,0,0,0,0,$w,$h);

imagepng($strap); 

imagedestroy($strap);
imagedestroy($buckle);

2 个答案:

答案 0 :(得分:2)

试试这段代码,看看它是否有效:

//call path of all images 
    //example: $peinado="/images/path/peinado.png";
    $image_1 = imagecreatefrompng($peinado);
    $image_2 = imagecreatefrompng($cejas);
    $image_3 = imagecreatefrompng($ojos);
    $image_4 = imagecreatefrompng($nariz);
    $image_5 = imagecreatefrompng($boca);

    //the frame of the original image
    $imgFinal = imagecreatefrompng($src);

    //alpha & transparency
    imagealphablending($imgFinal, true);
    imagesavealpha($imgFinal, true);

    //merge all images 
    imagecopy($imgFinal, $image_1, 0, 0, 0, 0, 259, 429);
    imagecopy($imgFinal, $image_2, 0, 0, 0, 0, 259, 429);
    imagecopy($imgFinal, $image_3, 0, 0, 0, 0, 259, 429);
    imagecopy($imgFinal, $image_4, 0, 0, 0, 0, 259, 429);
    imagecopy($imgFinal, $image_5, 0, 0, 0, 0, 259, 429);

    //save the png image
    imagepng($imgFinal, 'avatars/prueba.png');

答案 1 :(得分:0)

我认为你必须使用imagesavealpha():http://www.php.net/manual/en/function.imagesavealpha.php

  

信息:“你必须取消设置alphablending(imagealphablending($ im,false)),才能使用它。”