2

我正在构建一个产品配置模块,该模块需要将多个相同大小的透明 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 张图像。

谢谢

4

2 回答 2

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);

?>
于 2012-07-24T11:33:51.663 回答
0

你可以试试这个来编译透明图像。只需将要分层的每个图像视为新的水印图像。

于 2012-07-25T00:55:12.017 回答