基础级-图形验证码

专套本考试完毕,做个图形验证码笔记,也当做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~

Created with Raphaël 2.1.0 载入页面 用户输入 输入验证 执行请求 错误提示 验证码重载 yes no

结合前辈们的安利,提出简单方案:
通过JavaScript自动获取验证码图片,并同步保存至Session。
在提交表单时,通过验证码准确性验证后,方可执行请求。

参考资料:
PHP生成图形验证码的几种方法 - mysoftsky
经典的PHP验证码类分享 - junjie
HTTP头部详解 - zooyo

你可能感兴趣的:(PHP,验证码)