最近在做一个项目需要获取一张图片上的几个地方,然后合成一张需要的图片。
我第一想到的是只能裁剪了,但是裁剪的话原图的宽高只能是固定,好在原图的宽高是固定的。
首先我要获取这样一张图片的, 车牌号、经过时间、经过区域、名称、方向这些
首先得先裁剪两块图片下来,裁剪的代码就不贴出来,晚上好多栗子,或者你用一些框架也都自带了。下面是我裁剪下来的图片:
然后在使用合成代码合成后的图片:
/嘻嘻是不很完美,给大家贴一下代码,直接复制就可以使用
/** * 合成图片 * @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