php实现的证件照换底色功能示例【人像抠图/换背景图】


Posted in PHP onMay 29, 2020

本文实例讲述了php实现的证件照换底色功能。分享给大家供大家参考,具体如下:

<?php
//背景图和原图需要保持宽高要保持一样,这里的示例原图用的是蓝色背景
init();
function init(){
  $old = '1.png';
  $new = '2.png';
  //创建一个png透明图
  $img = imagecreatefrompng($old);
  setpng($img,$old,$new);
}
function setpng($imgid,$filename,$savename){
  $bg = 'bg.png';//背景图
  $new = imagecreatefrompng($bg);//创建一个png透明图
  list($width,$height)=getimagesize($filename);//获取长和宽
  $white = imagecolorallocate($imgid,1,155,215);//选择一个替换颜色。这里是绿色
  cleancolor($imgid,$white);
  imagecolortransparent($imgid,$white);//把选择的颜色替换成透明
  imagecopymerge($new,$imgid,0,0,0,0,$width,$height,100);//合并图片
  imagepng($new,$savename);//保存图片
  imagedestroy($imgid);//销毁
  imagedestroy($new);
  echo '<img src="'.$savename.'">';
}
function cleancolor($imgid,$color){
  $width = imagesx($imgid);//获取宽
  $height = imagesy($imgid);//获取高
  for($i=0;$i<$width;$i++){
    for($k=0;$k<$height;$k++){
      //对比每一个像素
      $rgb = imagecolorat($imgid,$i,$k);
      $r = ($rgb >> 16)&0xff;//取R
      $g = ($rgb >> 8)&0xff;//取G
      $b = $rgb&0xff;//取B
      $randr = 1.5;
      $randg = 1;
      $randb=1;
      //蓝色RGB大致的位置。替换成绿色
      if($r<=65*$randr && $g<=225*$randg && $b<=255*$randb && $b*$randb>=100){
        //如果能够精确的计算出要保留位置的,这里可以写绝对的数字
        if($i>=$width/2 && $i<=$width/2 && $k>=$height/2 && $k<=$height/2){
          
        }else{
          //改变颜色
          imagesetpixel($imgid,$i,$k,$color);
        }
      }
    }
  }
}
  • $old指的是要处理的图片,指定为png格式
  • $new指的是处理后输出的图片名
  • $bg指的是背景图

php实现的证件照换底色功能示例【人像抠图/换背景图】

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
Dec 05 PHP
php中sprintf与printf函数用法区别解析
Feb 17 PHP
浅析PHP微信支付通知的处理方式
May 25 PHP
PHP常用的小程序代码段
Nov 14 PHP
WordPress开发中短代码的实现及相关函数使用技巧
Jan 05 PHP
CI框架整合smarty步骤详解
May 19 PHP
php 解决substr()截取中文字符乱码问题
Jul 18 PHP
Laravel5中防止XSS跨站攻击的方法
Oct 10 PHP
Laravel实现表单提交
May 07 PHP
利用Homestead快速运行一个Laravel项目的方法详解
Nov 14 PHP
Laravel中的chunk组块结果集处理与注意问题
Aug 15 PHP
php+Ajax无刷新验证用户名操作实例详解
Mar 04 PHP
php生成短网址/短链接原理和用法实例分析
May 29 #PHP
PHP const定义常量及global定义全局常量实例解析
May 28 #PHP
PHP实现获取文件mime类型多种方法解析
May 28 #PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
May 27 #PHP
php+mysql实现的无限分类方法类定义与使用示例
May 27 #PHP
php与阿里云短信接口接入操作案例分析
May 27 #PHP
PHP开发API接口签名生成及验证操作示例
May 27 #PHP
You might like
用PHP调用Oracle存储过程
2006/10/09 PHP
mysql alter table命令修改表结构实例详解
2016/09/24 PHP
Yii框架引入coreseek分页功能示例
2019/02/08 PHP
JavaScript 事件参考手册
2008/12/24 Javascript
js中eval详解
2012/03/30 Javascript
jQuery中get()方法用法实例
2014/12/27 Javascript
jquery插件jquery.dragscale.js实现拖拽改变元素大小的方法(附demo源码下载)
2016/02/25 Javascript
JS获取元素多层嵌套思路详解
2016/05/16 Javascript
使用vue编写一个点击数字计时小游戏
2016/08/31 Javascript
Bootstrap 实现查询的完美方法
2016/10/26 Javascript
Bootstrap学习笔记之环境配置(1)
2016/12/07 Javascript
vue增删改查的简单操作
2017/07/15 Javascript
zTree 树插件实现全国五级地区点击后加载的示例
2018/02/05 Javascript
JavaScript面试出现频繁的一些易错点整理
2018/03/29 Javascript
Node.js中的cluster模块深入解读
2018/06/11 Javascript
微信小程序wx.uploadfile 本地文件转base64的实现代码
2018/06/28 Javascript
简单的React SSR服务器渲染实现
2018/12/11 Javascript
模块化react-router配置方法详解
2019/06/03 Javascript
layui数据表格跨行自动合并的例子
2019/09/02 Javascript
解决vuecli3中img src 的引入问题
2020/08/04 Javascript
解决vue自定义指令导致的内存泄漏问题
2020/08/04 Javascript
[57:31]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第一场 2月1日
2021/03/11 DOTA
rhythmbox中文名乱码问题解决方法
2008/09/06 Python
Python字符遍历的艺术
2008/09/06 Python
Python中的startswith和endswith函数使用实例
2014/08/25 Python
浅谈Python中的数据类型
2015/05/05 Python
对numpy 数组和矩阵的乘法的进一步理解
2018/04/04 Python
Keras搭建自编码器操作
2020/07/03 Python
耐克巴西官方网站:Nike巴西
2016/08/14 全球购物
Yves Rocher捷克官方网站:植物化妆品的创造者
2019/07/31 全球购物
机械绘图员岗位职责
2013/11/19 职场文书
办加油卡单位介绍信
2014/01/09 职场文书
工作违纪检讨书
2014/02/17 职场文书
建筑工地大门标语
2014/06/18 职场文书
政府个人对照检查材料
2014/08/28 职场文书
大学生学年个人总结
2015/02/15 职场文书