使用PHP GD展平多个透明PNG

时间:2012-07-24 09:51:46

标签: php image-processing png gd transparent

我正在构建一个产品配置模块,该模块要求将相同尺寸的多个透明PNG(代表产品部件)展平到一个图像上。

起初我尝试了这个,它构成了3张图像,但是在黑色背景上:

<?php

$x = 500;
$y = 500;

$final_img = imagecreatetruecolor($x, $y);
$images = array('1.png', '2.png', '3.png');

foreach ($images as $image) {
    $image_layer = imagecreatefrompng($image);
    imagecopy($final_img, $image_layer, 0, 0, 0, 0, $x, $y);
}

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

header('Content-Type: image/png');
imagepng($final_img);

?>

然后我发现这个功能可以解决黑色背景问题并给我一个透明的功能,但现在只显示添加到合成中的最后一个图像。

<?php

$x = 500;
$y = 500;

function imageCreateTransparent($x, $y) {
    $image = imagecreatetruecolor($x, $y);
    imagealphablending($image, false);
    imagesavealpha($image, true);
    $col = imagecolorallocatealpha($image,255,255,255,127);
    imagefill($image, 0, 0, $col);
    return $image;
}

$final_img = imageCreateTransparent($x, $y);
$images = array('1.png', '2.png', '3.png');

foreach ($images as $image) {
    $image_layer = imagecreatefrompng($image);
    imagecopy($final_img, $image_layer, 0, 0, 0, 0, $x, $y);
}

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

header('Content-Type: image/png');
imagepng($final_img);

?>

如何获得透明背景并显示合并在一起的所有3个图像。

谢谢

2 个答案:

答案 0 :(得分:3)

我已经修改了你的第一个例子来实现这一目标。

    <?php

$x = 500;
$y = 500;

$final_img = imagecreatetruecolor($x, $y);


imagesavealpha($final_img, true);


$trans_colour = imagecolorallocatealpha($final_img, 0, 0, 0, 127);
imagefill($final_img, 0, 0, $trans_colour);


$images = array('1.png', '2.png', '3.png');

foreach ($images as $image) {
    $image_layer = imagecreatefrompng($image);
    imagecopy($final_img, $image_layer, 0, 0, 0, 0, $x, $y);
}

//imagealphablending($final_img, true);
imagesavealpha($final_img, true);
imagealphablending($final_img, true);


header('Content-Type: image/png');
imagepng($final_img);

?>

答案 1 :(得分:0)

您可以尝试使用此library来编译透明图像。只需将每个图像视为一个新的水印图像。