我使用GD库创建图像所有功能都正常工作。但是我坚持的主要问题是我想将png图像合并到另一个图像上但是在重叠之后它不能正确合并并且看起来像jpg或其他而不是png。由于信誉不佳,我无法在此处上传我的图片,因此请点击下方的这些链接查看图片。
我要合并的图像是
Png图片
我合并上面图像的图像是:
我的代码在这里:
<?php
$im = imagecreate(288,288);
$background_color = imagecolorallocate($im, 230, 248, 248);
$file = 'images/smiley/smile'.$_POST['smiley'].'.png';
$bg = imagecreatefrompng($file);
imagealphablending($im, true);
imagesavealpha($bg, true);
imagecopyresampled($im, $bg, 80, 80, 0, 0, 50, 50, 185, 185);
header("Content-Type: image/png");
$filename = $_SESSION['rand'].'.png';
imagepng($im,$filename);
echo '<img src="'.$filename.'" alt="" />';
?>
答案 0 :(得分:1)
您的背景图片没有Alpha通道。这使得PHP GD库可以在不使用alpha通道的情况下完成所有复制操作,而只是将每个像素设置为完全不透明或透明,这不是您想要的。
最简单的解决方案是创建一个与具有Alpha通道的背景大小相同的新图像,然后将背景和面部复制到该图像中。
$baseImage = imagecreatefrompng("../../var/tmp/background.png");
$topImage = imagecreatefrompng("../../var/tmp/face.png");
// Get image dimensions
$baseWidth = imagesx($baseImage);
$baseHeight = imagesy($baseImage);
$topWidth = imagesx($topImage);
$topHeight = imagesy($topImage);
//Create a new image
$imageOut = imagecreatetruecolor($baseWidth, $baseHeight);
//Make the new image definitely have an alpha channel
$backgroundColor = imagecolorallocatealpha($imageOut, 0, 0, 0, 127);
imagefill($imageOut, 0, 0, $backgroundColor);
imagecopy($imageOut, $baseImage, 0, 0, 0, 0, $baseWidth, $baseHeight); //have to play with these
imagecopy($imageOut, $topImage, 0, 0, 0, 0, $topWidth, $topHeight); //have to play with these
//header('Content-Type: image/png');
imagePng($imageOut, "../../var/tmp/output.png");
该代码生成此图像: