/**
* @desc 合并身份证的正反面到同一张图片
* @author Jimmy
* @date 2016-12-33
* @param $imageSrc0 身份证正面
* @param $imageSrc1 身份证反面
* @param $desPath 合并后图片地址
* @return mixed
*/
public static function mergeImage($imageSrc0, $imageSrc1, $dirPath){
!file_exists($dirPath)&&mkdir($dirPath);
$imagePath0=self::rotateImage($imageSrc0,$dirPath);
$imagePath1=self::rotateImage($imageSrc1,$dirPath);
$size0=getimagesize($imagePath0);
$size1=getimagesize($imagePath1);
$image0_width=$size0[0];
$image0_height=$size0[1];
$image1_width=$size1[0];
$image1_height=$size1[1];
if($image0_width>$image1_width){
$canvas_width=$image0_width;
}else{
$canvas_width=$image1_width;
}
$canvas_height=$image0_height+$image1_height;
$im0=imagecreatefromjpeg($imagePath0);
$im1=imagecreatefromjpeg($imagePath1);
$canvas=imagecreatetruecolor($canvas_width,$canvas_height);
imagefill($canvas,0,0,imagecolorallocate($canvas,255,255,255));
$img0_x=($canvas_width-$image0_width)/2;
$img1_x=($canvas_width-$image1_width)/2;
imagecopyresampled($canvas,$im0,intval($img0_x),0,0,0,$image0_width,$image0_height, $image0_width,$image0_height);
imagecopyresampled($canvas,$im1,intval($img1_x),$image0_height,0,0,$image1_width,$image1_height, $image1_width,$image1_height);
$desPath = $dirPath. Uuid::createUuid().'.jpg';//这里只是使用写好的Uuid给图片取一个唯一的名字
file_exists($desPath)&&unlink($desPath);
imagejpeg($canvas,$desPath,100);
if($imagePath0!=$imageSrc0)file_exists($imagePath0)&&unlink($imagePath0);
if($imagePath1!=$imageSrc1)file_exists($imagePath1)&&unlink($imagePath1);
return $desPath;
} /**
* @desc 旋转长图片为宽图片
* @author Jimmy
* @date 2016-12-22
* @param $imagePath
* @return string
*/
public static function rotateImage($imagePath,$dirPath){
!file_exists($dirPath)&&mkdir($dirPath);
$size=getimagesize($imagePath);
if($size[0]<$size[1]){//图片需要旋转90度
$img=imagecreatefromjpeg($imagePath);
$rotate=imagerotate($img,90,0);
$desPath = dirname($dirPath). Uuid::createUuid().'.jpg';
imagejpeg($rotate,$desPath);
return $desPath;
}else{
return $imagePath;
}
}

注意:由于用户上传的身份证正反面有可能是横向的也有可能是竖向的,程序考虑了横图片(长度大于宽度)和竖图片(长度小于宽度)的不同情况,

遇到竖图片需要将之先旋转为横图片,这样才能让最后合成的图片都是横向的。

php将两张身份证图片合并到一张图的更多相关文章

  1. gulp-css-spriter 将css代码中的切片图片合并成雪碧图

    NPM地址:https://www.npmjs.com/package/gulp-css-spriter/ 配置gulpfile.js: var gulp = require('gulp'),     ...

  2. 读取多张MNIST图片与利用BaseEstimator基类创建分类器

    读取多张MNIST图片 在读取多张MNIST图片之前,我们先来看下读取单张图片如何实现 每张数字图片大小都为28 * 28的,需要将数据reshape成28 * 28的,采用最近邻插值,如下 def ...

  3. 图片合并成PDF,两个PDF的合并

    需求: 将多张手机照片合并成一个PDF,并于另一个成型PDF合并 过程: 使用全能扫描王处理一遍,拆剪掉多余部分,并提高亮度增加文字对比度 合并: 使用Faststone Capture合并图片即可. ...

  4. 【css样式生成 & 图片合并压缩工具】Sprite,你值得拥有

    好久好久没有更新博客了,越来越懒...话说懒也有懒的好处,懒的时候你可能会想着用些神马方法来帮你偷懒.没错,下面就给大家介绍个博主前不久开发的[css样式生成 & 图片合并压缩工具]Spirt ...

  5. Atitit 判断判断一张图片是否包含另一张小图片

    Atitit 判断判断一张图片是否包含另一张小图片 1. keyword1 2.  模板匹配是在图像中寻找目标的方法之一(切割+图像相似度计算)1 3. 匹配效果2 4. 图片相似度的算法(感知哈希算 ...

  6. [工具] GIF 动画每帧合并到一张 PNG

    功能:将 GIF 动画每帧合并到一张 PNG 需求:配合 ImageMagick 图像处理软件. 下载:[工具]Gif2Png_Aone_1.0.0.zip 使用方法: 请到 ImageMagick  ...

  7. java图片处理——多张图片合成一张Gif图片并播放或Gif拆分成多张图片

    1.多张jpg图合成gif动画 /** * 把多张jpg图片合成一张 * @param pic String[] 多个jpg文件名 包含路径 * @param newPic String 生成的gif ...

  8. js将用户上传gif动图分解成多张帧图片

    js将用户上传gif动图分解成多张帧图片 写在前面 工作中遇到一个这么一个需求:这是一个多图上传的场景,如果用户上传选择多张图片,则上传后直接展示多张图片,如果上传的图片是gif动图,则需要分解这张动 ...

  9. .net core微信群图片合并

    引用:SixLabors.ImageSharp,SixLabors.ImageSharp.Drawing,System.Drawing.Common /// <summary> /// 群 ...

随机推荐

  1. Linux速成(二)

    四.Linux 系统目录结构 树状目录结构: 以下是对这些目录的解释: /bin:bin是Binary的缩写, 这个目录存放着最经常使用的命令. /boot:这里存放的是启动Linux时使用的一些核心 ...

  2. python 网页转pdf

    主要使用的是wkhtmltopdf的Python封装——pdfkit centos环境 安装:Install python-pdfkit pip install pdfkit 安装:Install w ...

  3. 打包一个传统的ASP.NET web app作为Docker镜像

    (1)针对NerdDinner应用的Dockerfile内容如下 PS E:\DockeronWindows\Chapter02\ch02-nerd-dinner> cat .\Dockerfi ...

  4. 线程_synchronized_volatile_ReentranLock

    线程:cpu同时执行多个任务 synchonized   代码块,对象,类 同步方法和非同步方法可以同时执行同步方法可以调用同步方法(重入)脏读:之同步写,不同步读死锁的demo  一个线程先对A加锁 ...

  5. windows docker 安装cloudera/quickstart

    最近需要写一个大数据的项目,但是公司没有测试环境,真是cao蛋,没办法,只能自己搭建一个测试环境,所以就在本地电脑装一个cloudera/quickstart,这个是一个单节点的大数据平台, 是clo ...

  6. pstree命令详解

    基础命令学习目录首页 pstree命令是用于查看进程树之间的关系,即哪个进程是父进程,哪个是子进程,可以清楚的看出来是谁创建了谁#pstree几个重要的参数:-A: 各进程树之间的连接以ASCII码字 ...

  7. 如何在静态方法或非Spring Bean中注入Spring Bean

           在项目中有时需要根据需要在自己new一个对象,或者在某些util方法或属性中获取Spring Bean对象,从而完成某些工作,但是由于自己new的对象和util方法并不是受Spring所 ...

  8. selenium+python 自动化

    <a class="big_images_new" target="_blank" href="http://photo.xcar.com.cn ...

  9. JavaScript实现弹出层(以layer.open为例)

    首先,引用layer,自行下载. 添加如下两行 <script src=" ../layer/jquery.min.js"></script> <sc ...

  10. 在onResume()中调用getIntent()得不到Extra的问题

    之前 想做activity间的传值,注意 不是 startActivityforResult的那种, 在启动了多层activity再次启动activity想进入到singleTask的MainActi ...