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 相关文章推荐
图象函数中的中文显示
Oct 09 PHP
实用函数4
Nov 08 PHP
谈PHP生成静态页面分析 模板+缓存+写文件
Aug 17 PHP
php中经典方法实现判断多维数组是否为空
Oct 23 PHP
PHP序列号生成函数和字符串替换函数代码
Jun 07 PHP
适用于抽奖程序、随机广告的PHP概率算法实例
Apr 09 PHP
四种php中webservice实现的简单架构方法及实例
Feb 03 PHP
php继承中方法重载(覆盖)的应用场合
Feb 09 PHP
php实现的数字验证码及数字运算验证码
Jul 30 PHP
CodeIgniter框架常见用法工作总结
Mar 16 PHP
Thinkphp5结合layer弹窗定制操作结果页面
Jul 07 PHP
Yii中特殊行为ActionFilter的使用方法示例
Oct 18 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数组函数序列之array_keys() - 获取数组键名
2011/10/30 PHP
php curl常见错误:SSL错误、bool(false)
2011/12/28 PHP
php变量范围介绍
2012/10/15 PHP
php定时执行任务设置详解
2015/02/06 PHP
PHP递归遍历指定文件夹内的文件实现方法
2016/11/15 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
2017/02/04 PHP
Prototype使用指南之hash.js
2007/01/10 Javascript
jquery中的mouseleave和mouseout的区别 模仿下拉框效果
2012/02/07 Javascript
js+html+css实现鼠标移动div实例
2013/01/30 Javascript
Knockout text绑定DOM的使用方法
2013/11/15 Javascript
通过onmouseover选项卡实现img图片的变化
2014/02/12 Javascript
jQuery Validate 验证,校验规则写在控件中的具体实例
2014/02/27 Javascript
jquery实现点击文字可编辑并修改保存至数据库
2014/04/15 Javascript
AngularJS bootstrap启动详解及实例代码
2016/09/14 Javascript
javascript 实现动态侧边栏实例详解
2016/11/11 Javascript
BootStrap Fileinput上传插件使用实例代码
2017/07/28 Javascript
详解React Native网络请求fetch简单封装
2017/08/10 Javascript
js利用iframe实现选项卡效果
2020/08/09 Javascript
浅析JavaScript预编译和暗示全局变量
2020/09/03 Javascript
[02:27]刀塔重生降临
2015/10/14 DOTA
[43:32]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
[03:06]2018年度CS GO最具人气解说-完美盛典
2018/12/16 DOTA
python中Flask框架简单入门实例
2015/03/21 Python
python清除指定目录内所有文件中script的方法
2015/06/30 Python
Python3.5常见内置方法参数用法实例详解
2019/04/29 Python
浅谈Django中view对数据库的调用方法
2019/07/18 Python
Python之指数与E记法的区别详解
2019/11/21 Python
python3爬虫中异步协程的用法
2020/07/10 Python
Ralph Lauren法国官网:美国高品味时装品牌
2017/12/08 全球购物
Bally美国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/18 全球购物
Ever New加拿大官网:彰显女性美
2018/10/05 全球购物
创先争优活动承诺书
2014/08/30 职场文书
2014银行领导班子群众路线对照检查材料思想汇报
2014/09/17 职场文书
2014年优秀班主任工作总结
2014/12/16 职场文书
两行代码解决Jupyter Notebook中文不能显示的问题
2021/04/24 Python
python设置 matplotlib 正确显示中文的四种方式
2021/05/10 Python