专套本考试完毕,做个图形验证码笔记,也当做GD API的敲门砖。
前述
图形验证码的生成需要使用GD库。
GD库是php处理图形的扩展库,提供了一系列用来生成、处理图片的API。
貌似默认开启,如若未开启,请在php.ini
文件的extension=php_gd2.dll
行开启,去除该段代码前的;
即可。可使用print_r(gd_info());
来确认启用状况。
- 功能涵盖:生成缩略图、图片加水印、验证码、生成报表 等。
- Tips:在2.0.28 版之前,GIF相关函数无法使用。”(来源:百度百科)
一般流程为:生成或读取画布 → 定义所需颜色 → 填充内容 → 输出图片 → 销毁画布
imagecreate
所需函数
我们要用到的函数有:
1. imagecreate( int $x_size , int $y_size )
:用于创建画布;
2. imagecolorallocate( resource $image , int $red , int $green , int $blue )
:用于分配颜色
3. imagesetpixel( resource $image , int $x , int $y , int $color )
:用于绘制单一像素。图像左上角为0,0
。
4. imagestring( resource $image , int $font , int $x , int $y , string $s , int $col )
:绘制字符串。
5. imagerectangle( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $col )
:绘制矩形。左上角坐标为 x1, y1,右下角坐标为 x2, y2。
6. imagepng( resource $image [, string $filename ] )
:将 GD 图像流(image)以 PNG 格式输出,或者如果用 filename 给出了文件名则将其输出到该文件。
7. imagedestroy ( resource $image )
:销毁图像占用内存。
看了上述内容,我相信脑海中已经有了一个框架了,那么我们来讨论一些技术细节。
技术细节
用于声明图层文件的格式的HTTP头,看代码自己体悟:header("Content-Type:image/png");
。
关于HTTP头的内容,详见参考资料中的HTTP头部详解,供大家系统化的了解、熟悉头部知识——那些问头皮屑和毛发知识的人,你们奏凯,23333~
结合前辈们的安利,提出简单方案:
通过JavaScript自动获取验证码图片,并同步保存至Session。
在提交表单时,通过验证码准确性验证后,方可执行请求。
参考资料:
PHP生成图形验证码的几种方法 - mysoftsky
经典的PHP验证码类分享 - junjie
HTTP头部详解 - zooyo