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 相关文章推荐
PHP 文件上传源码分析(RFC1867)
Oct 30 PHP
Memcache 在PHP中的使用技巧
Feb 08 PHP
php短域名转换为实际域名函数
Jan 17 PHP
PHP中遍历stdclass object的实现代码
Jun 09 PHP
有关PHP中MVC的开发经验分享
May 17 PHP
php数据结构与算法(PHP描述) 快速排序 quick sort
Jun 21 PHP
PHP5下$_SERVER变量不再受magic_quotes_gpc保护的弥补方法
Oct 31 PHP
简单的php文件上传(实例)
Oct 27 PHP
php上传图片存入数据库示例分享
Mar 11 PHP
php实现用户登陆简单实例
Apr 04 PHP
提高Laravel应用性能方法详解
Jun 24 PHP
laravel数据库查询结果自动转数组修改实例
Feb 27 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者的疑难问答(2)
2006/10/09 PHP
PHP高级OOP技术演示
2009/08/27 PHP
Laravel 5框架学习之路由、控制器和视图简介
2015/04/07 PHP
PHP中子类重载父类的方法【parent::方法名】
2016/05/06 PHP
php通过两层过滤获取留言内容的方法
2016/07/11 PHP
Zend Framework路由器用法实例详解
2016/12/11 PHP
php redis setnx分布式锁简单原理解析
2020/10/23 PHP
实现web打印的各种方法介绍及实现代码
2013/01/09 Javascript
了不起的node.js读书笔记之mongodb数据库交互
2014/12/22 Javascript
js 获取元素在页面上的偏移量的方法汇总
2015/04/13 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
jQuery Dialog 取消右上角删除按钮事件
2016/09/07 Javascript
Jquery给当前页或者跳转后页面的导航栏添加选中后样式的实例
2016/12/08 Javascript
mongoose中利用populate处理嵌套的方法
2017/05/26 Javascript
创建简单的node服务器实例(分享)
2017/06/23 Javascript
Ionic3实现图片瀑布流布局
2017/08/09 Javascript
node通过express搭建自己的服务器
2017/09/30 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
2019/03/12 Javascript
Element ui 下拉多选时新增一个选择所有的选项
2019/08/21 Javascript
layui写后台表格思路和赋值用法详解
2019/11/14 Javascript
python Django模板的使用方法(图文)
2013/11/04 Python
python读取图片并修改格式与大小的方法
2018/07/24 Python
python爬虫自动创建文件夹的功能
2018/08/01 Python
python UDP(udp)协议发送和接收的实例
2019/07/22 Python
html5 利用canvas手写签名并保存的实现方法
2018/07/12 HTML / CSS
HTML5实现可缩放时钟代码
2017/08/28 HTML / CSS
三星美国官网:Samsung美国
2017/02/06 全球购物
美国在线印刷公司:PsPrint
2017/10/12 全球购物
Wiggle澳大利亚:自行车、跑步、游泳商店
2020/11/07 全球购物
《狼和小羊》教学反思
2014/04/20 职场文书
团队口号大全
2014/06/06 职场文书
公务员考察材料范文
2014/12/23 职场文书
市级三好学生评语
2014/12/29 职场文书
避暑山庄导游词
2015/02/04 职场文书
2016形势与政策学习心得体会
2016/01/12 职场文书
python基础入门之普通操作与函数(三)
2021/06/13 Python