我正在构建一个产品配置模块,该模块要求将相同尺寸的多个透明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个图像。
谢谢
答案 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来编译透明图像。只需将每个图像视为一个新的水印图像。