php实现的证件照换底色功能示例【人像抠图/换背景图】
发布:smiling 来源: PHP粉丝网 添加日期:2022-03-11 09:00:36 浏览: 评论:0
本文实例讲述了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指的是背景图
Tags: php证件照换底色
- 上一篇:php与阿里云短信接口接入操作案例分析
- 下一篇:最后一页
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)