假设我想创建一个面部生成器,我会在其中设计几张面部形状,耳朵,鼻子,嘴巴,头发的图片。鉴于这些图片的组合,我如何在PHP中创建新图片?例如,简化版本:
有face1.png,face2.png,nose1.png和nose2.png。我怎么能以编程方式将face1.png与nose2.png合并,所以结果图片会保存两张图片中的内容?
答案 0 :(得分:2)
你基本上有三种选择:GD,Cairo或ImageMagic。我推荐使用Imagick课程。如果没有,ImageMagick通过PHP系统调用。如果没有,GD可能就足够了。
这取决于您的服务器配置,哪些可用,哪些需要安装其他软件包。
结合图像的Imagick文档中有一个非常简单的例子:https://secure.php.net/manual/en/imagick.compositeimage.php
我也为GD找到了这个例子: Merge two PNG images with PHP GD library
答案 1 :(得分:1)
有一个名为imagecopy的函数。此功能使用源图像覆盖目标图像的一部分。给定的部分被指定为参数。在您告诉我这不能解决您的问题之前,我必须补充一点,如果像素是透明的,则源图片的像素不会覆盖目标图片中的像素。您需要在源图片上使用imagealphablending和imagesavealpha,如下所示:
public static function experimental($images, $width, $height, $dest = null) {
$index = 0;
if ($dest === null) {
$dest = $images[$index++];
}
while ($index < count($images)) {
imagealphablending($images[$index], true);
imagesavealpha($images[$index], true );
imagecopy($dest, $images[$index++], 0, 0, 0, 0, $width, $height);
}
return $dest;
}
如果我们有这两张照片:
结果将是:
答案 2 :(得分:0)
你真的想用PHP制作吗? 确定。
1)您可以使用GD库进行图像处理。 2)你可以使用imagemagic PHP包装器 - imagic。
但我认为你应该在客户端使用canvas。为了保存结果,您可以将canvas的base64 png图像表示(或分隔的图层/图片)发送到后端。