图片合并

//两张图片合并

//$path_1图一路径,$path_2图2路径,$save_path生成后图片路径

//最终生成以正方形为目地

function yi_images_merge($path_1,$path_2,$save_path)

{

    //创建图片对象

    $image_1 = imagecreatefromjpeg($path_1);

    $image_2 = imagecreatefromjpeg($path_2);

    if((imagesx($image_1)+imagesx($image_2))<(imagesy($image_1)+imagesy($image_2)))

    {

        $body_y=imagesy($image_1)>imagesy($image_2)?imagesy($image_1):imagesy($image_2);

        //创建真彩画布

        //imagecreatetruecolor(int $width, int $height)--新建一个真彩色图像

        $image_3 = imageCreatetruecolor(imagesx($image_1)+imagesx($image_2),$body_y);

        //为真彩画布创建白色背景

        //imagecolorallocate(resource $image, int $red, int $green, int $blue)

        $color = imagecolorallocate($image_3, 255, 255, 255);

        //imagefill(resource $image ,int $x ,int $y ,int $color)

        //在 image 图像的坐标 x,y(图像左上角为 0, 0)处用 color 颜色执行区域填充(即与 x, y 点颜色相同且相邻的点都会被填充)

        imagefill($image_3, 0, 0, $color);

        //设置透明

        //imagecolortransparent(resource $image [,int $color])

        //将image图像中的透明色设定为 color

        imageColorTransparent($image_3, $color);

        //复制图片一到真彩画布中(重新取样-获取透明图片)

        //imagecopyresampled(resource $dst_image ,resource $src_image ,int $dst_x ,int $dst_y ,int $src_x , int $src_y ,int $dst_w ,int $dst_h ,int $src_w ,int $src_h)

        // dst_image:目标图象连接资源

        // src_image:源图象连接资源

        // dst_x:目标 X 坐标点

        // dst_y:目标 Y 坐标点

        // src_x:源的 X 坐标点

        // src_y:源的 Y 坐标点

        // dst_w:目标宽度

        // dst_h:目标高度

        // src_w:源图象的宽度

        // src_h:源图象的高度

        imagecopyresampled($image_3, $image_1, 0, 0, 0, 0, imagesx($image_1), imagesy($image_1), imagesx($image_1), imagesy($image_1));

        //与图片二合成

        //imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct )---拷贝并合并图像的一部分

        // //将 src_im 图像中坐标从 src_x,src_y 开始,宽度为 src_w,高度为 src_h 的一部分拷贝到 dst_im 图像中坐标为 dst_x 和 dst_y 的位置上。两图像将根据 pct 来决定合并程度,其值范围从 0 到 100。当 pct = 0 时,实际上什么也没做,当为 100 时对于调色板图像本函数和 imagecopy() 完全一样,它对真彩色图像实现了 alpha 透明。

        imagecopymerge($image_3, $image_2, imagesx($image_1), 0, 0, 0, imagesx($image_2), imagesy($image_2), 100);  

        imagejpeg($image_3,$save_path);

    }else{

        $body_x=imagesx($image_1)>imagesx($image_2)?imagesx($image_1):imagesx($image_2);

        //创建真彩画布

        //imagecreatetruecolor(int $width, int $height)--新建一个真彩色图像

        $image_3 = imageCreatetruecolor($body_x,imagesy($image_1)+imagesy($image_2));

        //为真彩画布创建白色背景

        //imagecolorallocate(resource $image, int $red, int $green, int $blue)

        $color = imagecolorallocate($image_3, 255, 255, 255);

        //imagefill(resource $image ,int $x ,int $y ,int $color)

        //在 image 图像的坐标 x,y(图像左上角为 0, 0)处用 color 颜色执行区域填充(即与 x, y 点颜色相同且相邻的点都会被填充)

        imagefill($image_3, 0, 0, $color);

        //设置透明

        //imagecolortransparent(resource $image [,int $color])

        //将image图像中的透明色设定为 color

        imageColorTransparent($image_3, $color);

        //复制图片一到真彩画布中(重新取样-获取透明图片)

        //imagecopyresampled(resource $dst_image ,resource $src_image ,int $dst_x ,int $dst_y ,int $src_x , int $src_y ,int $dst_w ,int $dst_h ,int $src_w ,int $src_h)

        // dst_image:目标图象连接资源

        // src_image:源图象连接资源

        // dst_x:目标 X 坐标点

        // dst_y:目标 Y 坐标点

        // src_x:源的 X 坐标点

        // src_y:源的 Y 坐标点

        // dst_w:目标宽度

        // dst_h:目标高度

        // src_w:源图象的宽度

        // src_h:源图象的高度

        imagecopyresampled($image_3, $image_1, 0, 0, 0, 0, imagesx($image_1), imagesy($image_1), imagesx($image_1), imagesy($image_1));

        //与图片二合成

        //imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct )---拷贝并合并图像的一部分

        // //将 src_im 图像中坐标从 src_x,src_y 开始,宽度为 src_w,高度为 src_h 的一部分拷贝到 dst_im 图像中坐标为 dst_x 和 dst_y 的位置上。两图像将根据 pct 来决定合并程度,其值范围从 0 到 100。当 pct = 0 时,实际上什么也没做,当为 100 时对于调色板图像本函数和 imagecopy() 完全一样,它对真彩色图像实现了 alpha 透明。

        imagecopymerge($image_3, $image_2, 0, imagesy($image_1), 0, 0, imagesx($image_2), imagesy($image_2), 100);  

        imagejpeg($image_3,$save_path);

    }

    

}

$path_1 = './1.jpg';

// 图片二

$path_2 = './2.jpg';

yi_images_merge($path_1,'./merge2.jpg','./merge2.jpg');




///多图合并
private  function yi_arr_images_merge($arr,$save_path)

    {

        $count=count($arr);

        $re=null;

        if($count>1)

        {

            $var_arr=null;

            foreach($arr as $k=>$v)

            {

                if(!isset($var_arr[$k]))

                {

                    if($k+1<$count)

                    {

                        $tmp_path=tempnam("tmp","tmp");

                        yi_images_merge($arr[$k],$arr[$k+1],$tmp_path);

                        $var_arr[$k]=$arr[$k];

                        $var_arr[$k+1]=$arr[$k+1];

                        $re[]=$tmp_path;

                    }else{

                        $re[]=$v;

                    }

                    

                }

            }

            if(count($re)>1)

            {

                $re=yi_arr_images_merge($re,$save_path);

                return $re;

            }else{

                copy($re[0],$save_path);

                    return  null;

            }

            

        }else{

            copy($arr,$save_path);

                return  null;

        }

    }
yi_arr_images_merge($img_list,"out/".$v["name"].".jpg");