php实现的证件照换底色功能示例【人像抠图/换背景图】
吾爱主题
阅读:122
2021-10-15 14:57:00
评论:0
本文实例讲述了php实现的证件照换底色功能。分享给大家供大家参考,具体如下:
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | <?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程序设计有所帮助。
原文链接:https://segmentfault.com/a/1190000022566355
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。