第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 中科数创 php PHP生成验证码 - 低调是最牛逼的炫耀 - OSCHINA - 中文开源技术交流社区...

中科数创 php PHP生成验证码 - 低调是最牛逼的炫耀 - OSCHINA - 中文开源技术交流社区...

时间:2022-01-19 15:02:22

相关推荐

中科数创 php PHP生成验证码 - 低调是最牛逼的炫耀 - OSCHINA - 中文开源技术交流社区...

PHP提供了一系列函数来实现在网站编程中对图像进行编辑。PHP的图像处理函数都封装在一个函数库中,这就是GD库。GD库用于处理图像,它是一个开放源码的动态创建图像的函数库,可以创建和操作多种不同格式的图像文件,并可以直接以图像流将图像输出到浏览器。

GD库在很多需要动态生成图像、自动批量处理图像等方面,能给PHP网站开发者带来巨大帮助,如:将用户上传到服务器的相片生成缩略图以供预览;为防止恶意攻击等而使用的验证码图片;给自己的图片加入版权信息等水印。以及数据统计中饼状图、柱形图和折线图等。

一、创建画布及常用颜色

1.1 创建画布

$num=4;

$imgW=102;//画布宽度

$imgH=40;//画布高度

$img=imagecreatetruecolor($imgW,$imgH);//创建画布

1.2 常用颜色

$white=imagecolorallocate($img,255,255,255);//白色

$gray=imagecolorallocate($img,228,228,228);//灰色

//我们将一系列颜色存入$color[]数组里

$color[]=imagecolorallocate($img,255,0,0);//$red

$color[]=imagecolorallocate($img,190,8,10);//$red--

$color[]=imagecolorallocate($img,243,97,97);//$red--

$color[]=imagecolorallocate($img,94,153,11);//$green

$color[]=imagecolorallocate($img,124,145,0);//$grass

$color[]=imagecolorallocate($img,107,193,70);//$gree--

$color[]=imagecolorallocate($img,83,104,189);//blue

二、填充画布及创建边框

imagefill($img,0,0,$white);//用$white填充画布

imagerectangle($img,0,0,$imgW-1,$imgH-1,$gray);//创建一个$gray边框

三、添加验证码内容

3.1 引入字体

//这里我们将字体文件存入一个数组,方便以后随机调用

$fonts[]="msyh.ttf";

$fonts[]="ninefeetunder.ttf";

$fonts[]="bubblesoap.ttf";

$fonts[]="DPStick.ttf";

3.2 验证码内容

$verifyText=getVerifyCode($num,2);

/**

*生成验证码内容函数

*@Parameter$num,默认为4,即创建4个字符的验证码

*@Parameter$type,默认为0,即创建验证码类型为纯数字

*/

functiongetVerifyCode($num=4,$type=0){

$showStr="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

$opNum=array(9,35,strlen($showStr)-1);

$str="";

for($i=0;$i

$str.=$showStr[rand(0,$opNum[$type])];

}

return$str;

}

3.3 生成验证码内容

$textColor=$color[rand(0,count($color)-1)];//随机显示文字字体颜色

$fontsType=$fonts[rand(0,count($fonts)-1)];//随机显示文字字体类型

for($i=0;$i

imagettftext(

$img,//

28,//字体大小

rand(-20,20),//文字旋转角度

4+($i*23),//依次将文字内容遍历显示,x轴

rand(32,34),//文字内容y轴显示位置

$textColor,//文字字体颜色

$fontsType,//文字字体类型

$verifyText[$i]//文字内容

);

}

3.4随机添加干扰点

for($i=0;$i<150;$i++){

$dot=imagecolorallocate($img,rand(0,255),rand(0,255),rand(0,255));//随机一个颜色

imagesetpixel($img,rand(1,$imgW-2),rand(1,$imgH-2),$dot);

}

3.5随机添加干扰线

$linkColor=$color[rand(0,count($color)-1)];//随机获取颜色

for($i=0;$i<2;$i++){//随机生成两条干扰线

imageline($img,rand(0,$imgW),rand(0,$imgH),rand(0,$imgW),rand(0,$imgH),$linkColor);

}

四、输出验证码

header("Content-type:image/png");

imagepng($img);

imagedestroy($img);

五、效果展示

六、帮助文档

6.1imagecreatetruecolor() --新建一个真彩色图像

6.2imagecolorallocate() --为一幅图像分配颜色

6.3imagefill() --区域填充

6.4imagerectangle() --画一个矩形

6.5imagettftext() --用 TrueType 字体向图像写入文本

6.6imagesetpixel() --画一个单一像素

6.7imageline() --画一条线段

6.8imagepng()

6.9imagedestroy() --销毁一图像

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。