PHP无缝合成图片实例

最近在做一个项目需要获取一张图片上的几个地方,然后合成一张需要的图片。

我第一想到的是只能裁剪了,但是裁剪的话原图的宽高只能是固定,好在原图的宽高是固定的。

首先我要获取这样一张图片的, 车牌号、经过时间、经过区域、名称、方向这些

test.jpg

首先得先裁剪两块图片下来,裁剪的代码就不贴出来,晚上好多栗子,或者你用一些框架也都自带了。下面是我裁剪下来的图片:

save1.png

save2.png

然后在使用合成代码合成后的图片:

save.png

/嘻嘻是不很完美,给大家贴一下代码,直接复制就可以使用


/**
     * 合成图片
     * @param array $image_path 需要合成的图片数组
     * @param $save_path 合成后图片保存路径
     * @param string $axis 合成方向
     * @param string $save_type 合成后图片保存类型
     * @return bool|array
     */
   function CompositeImage(array $image_path,$save_path,$axis='x',$save_type='png'){
        if(count($image_path)<2){
            return false;
        }
        //定义一个图片对象数组
        $image_obj=[];
        //获取图片信息
        $width=0;
        $height=0;
        foreach($image_path as $k=>$v){
            $pic_info=getimagesize($v);
            list($mime,$type)=explode('/',$pic_info['mime']);
            //获取宽高度
            $width+=$pic_info[0];
            $height+=$pic_info[1];
            if($type=='jpeg'){
                $image_obj[]=imagecreatefromjpeg($v);
            }elseif($type=='png'){
                $image_obj[]=imagecreatefrompng($v);
            }else{
                $image_obj[]=imagecreatefromgif($v);
            }
        }
        //按轴生成画布方向
        if($axis=='x'){
            //TODO X轴无缝合成时请保证所有图片高度相同
            $img=imageCreatetruecolor($width,imagesy($image_obj[0]));
        }else{
            //TODO Y轴无缝合成时请保证所有图片宽度相同
            $img=imageCreatetruecolor(imagesx($image_obj[0]),$height);
        }
        //创建画布颜色
        $color=imagecolorallocate($img, 255, 255, 255);
        imagefill($image_obj[0],0,0,$color);
        //创建画布
        imageColorTransparent($img,$color);
        imagecopyresampled($img,$image_obj[0],0,0,0,0,imagesx($image_obj[0]),imagesy($image_obj[0]),imagesx($image_obj[0]),imagesy($image_obj[0]));
        $yx=imagesx($image_obj[0]);
        $x=0;
        $yy=imagesy($image_obj[0]);
        $y=0;
        //循环生成图片
        for($i=1;$i<=count($image_obj)-1;$i++){
            if($axis=='x'){
                $x=$x+$yx;
                imagecopymerge($img,$image_obj[$i],$x,0,0,0,imagesx($image_obj[$i]),imagesy($image_obj[$i]), 100);
            }else{
                $y=$y+$yy;
                imagecopymerge($img,$image_obj[$i],0,$y,0,0,imagesx($image_obj[$i]),imagesy($image_obj[$i]), 100);
            }
        }
        //设置合成后图片保存类型
        if($save_type=='png'){
            imagepng($img,$save_path);
        }elseif($save_type=='jpg'||$save_type=='jpeg'){
            imagejpeg($img,$save_path);
        }else{
            imagegif($img,$save_path);
        }
        return true;
    }
 记住别忘了要打开GD库了

Comments : 0

有问题可在下面发表评论,当然没事也可以在下面吹吹牛皮、扯扯淡!

发表评论

*


Warning: Cannot modify header information - headers already sent by (output started at /www/wwwroot/blog/content/templates/Bitter/footer.php:40) in /www/wwwroot/blog/include/lib/view.php on line 23