本文实例讲述了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