将多张图片合并为一张

时间:2015-12-25 21:10:24

标签: php image-processing

假设我想创建一个面部生成器,我会在其中设计几张面部形状,耳朵,鼻子,嘴巴,头发的图片。鉴于这些图片的组合,我如何在PHP中创建新图片?例如,简化版本:

有face1.png,face2.png,nose1.png和nose2.png。我怎么能以编程方式将face1.png与nose2.png合并,所以结果图片会保存两张图片中的内容?

3 个答案:

答案 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的函数。此功能使用源图像覆盖目标图像的一部分。给定的部分被指定为参数。在您告诉我这不能解决您的问题之前,我必须补充一点,如果像素是透明的,则源图片的像素不会覆盖目标图片中的像素。您需要在源图片上使用imagealphablendingimagesavealpha,如下所示:

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

如果我们有这两张照片:

enter image description here enter image description here

结果将是:

enter image description here

答案 2 :(得分:0)

你真的想用PHP制作吗? 确定。

1)您可以使用GD库进行图像处理。 2)你可以使用imagemagic PHP包装器 - imagic。

但我认为你应该在客户端使用canvas。为了保存结果,您可以将canvas的base64 png图像表示(或分隔的图层/图片)发送到后端。