PHP基于GD2函数库实现验证码功能示例


Posted in PHP onJanuary 27, 2019

本文实例讲述了PHP基于GD2函数库实现验证码功能。分享给大家供大家参考,具体如下:

在正式制作验证码之前要先补充点知识,PHP使用GD2函数库实现对各种图形图像的处理,所以我们制作验证码主要要使用到一些GD2函数库里的一些函数:

imagecreatetruecolor($width,$height)函数,主要用于创建画布,有2个参数width和height是必选的,代表你所要创建的画布的长和宽;

imagecolorallocate($image, $red, $green, $blue)函数,主要用于填充图像,第1个参数是你所创建的图像的标识符,后面3个参数是颜色的RGB设置;

imagefill($image, $x, $y, $color)函数,第一个函数是你创建的图像标识符,第2、3个参数$x、$y是左上角坐标,最后一个参数是你要填充颜色;

imagestring($image, $font, $x, $y, $string, $color)函数设置文字,且imagestring()函数如果直接绘制中文字符串会出现乱码,如果要绘制中文字符串可以使用imagettftext()函数;

imagepng($image[,$filename])函数以phg格式将图像输出到浏览器或者保存为文件,第1个参数为你创建的图像标识号,第2个参数为可选参数,你要保存文件的文件名;

imagesetpixel($image, $x, $y, $color)函数画单个像素点;

imageline($image, $x1, $y1, $x2, $y2, $color)函数画一条线段,$x1、$y1是线段是左上角坐标,$x2、$y2是线段的右下角坐标。

代码主要如下:

<?php
  //创建画布
  $img = imagecreatetruecolor(100, 50);
  //创建颜色
  $black = imagecolorallocate($img, 0x00, 0x00, 0x00);
  $green = imagecolorallocate($img, 0x00, 0xFF, 0x00);
  $white = imagecolorallocate($img, 0xFF, 0xFF, 0xFF);
  //画布填充颜色
  imagefill($img, 0, 0, $white);//背景为白色
  //生成随机验证码
  $code = make(5);
  //设置文字
  imagestring($img, 5, 10, 10, $code, $black);//黑字
  //加入噪点干扰
  for ($i = 0; $i <300; $i++){
    imagesetpixel($img, rand(0, 100), rand(0, 100), $black);
    imagesetpixel($img, rand(0, 100), rand(0, 100), $green);
  }
  //加入线段干扰
  for ($n = 0; $n <=1; $n++){
    imageline($img, 0, rand(0, 40), 100, rand(0, 40), $black);
    imageline($img, 0, rand(0, 40), 100, rand(0, 40), $white);
  }
  //输出验证码
  header("content-type: image/png");//告诉浏览器这个文件是一个png图片
  imagepng($img);
  //销毁图片,释放内存
  imagedestroy($img);
  //生成随机验证码的函数
  function make($length){
    $code = 'abcdefghijklmnopqrsruvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    //str_shuffle()函数用于打乱字符串
    return substr(str_shuffle($code), 0, $length);
  }
?>

实现效果如下图:

PHP基于GD2函数库实现验证码功能示例

PHP基于GD2函数库实现验证码功能示例

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
在Windows版的PHP中使用ADO
Oct 09 PHP
E路文章系统PHP
Dec 11 PHP
php获取mysql版本的几种方法小结
Mar 25 PHP
在PHP中使用反射技术的架构插件使用说明
May 18 PHP
PHP的一个基础知识 表单提交
Jul 04 PHP
php日期转时间戳,指定日期转换成时间戳
Jul 17 PHP
解析php php_openssl.dll的作用
Jul 01 PHP
PHP实现链式操作的核心思想
Jun 23 PHP
WampServer搭建php环境时遇到的问题汇总
Jul 23 PHP
PHP闭包函数传参及使用外部变量的方法
Mar 15 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
Nov 23 PHP
如何在PHP中读写文件
Sep 07 PHP
PHP的PDO事务与自动提交
Jan 24 #PHP
PHP的PDO连接讲解
Jan 24 #PHP
PHP的PDO预定义常量讲解
Jan 24 #PHP
PHP的mysqli_thread_id()函数讲解
Jan 24 #PHP
PHP的mysqli_stmt_init()函数讲解
Jan 24 #PHP
详解php伪造Referer请求反盗链资源
Jan 24 #PHP
PHP的mysqli_stat()函数讲解
Jan 23 #PHP
You might like
Php无限级栏目分类读取的实现代码
2014/02/19 PHP
C#使用PHP服务端的Web Service通信实例
2014/04/08 PHP
PHP版本常用的排序算法汇总
2015/12/20 PHP
php 指定范围内多个随机数代码实例
2016/07/18 PHP
javascript 学习之旅 (2)
2009/02/05 Javascript
jQuery编写widget的一些技巧分享
2010/10/28 Javascript
js创建数据共享接口——简化框架之间相互传值
2011/10/23 Javascript
浅谈关于JavaScript的语言特性分析
2013/04/11 Javascript
JS实现简洁、全兼容的拖动层实例
2015/05/13 Javascript
在JavaScript中使用开平方根的sqrt()方法
2015/06/15 Javascript
javascript省市级联功能实现方法实例详解
2015/10/20 Javascript
详解JavaScript对象和数组
2015/12/03 Javascript
AngularJS 日期格式化详解
2015/12/23 Javascript
Bootstrap的modal拖动效果
2016/12/25 Javascript
js图片延迟加载(Lazyload)三种实现方式
2017/03/01 Javascript
Echarts动态加载多条折线图的实现代码
2019/05/24 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
2019/11/04 Javascript
[01:11]回顾历届DOTA2国际邀请赛中国区预选赛
2017/06/26 DOTA
[00:59]DOTA2英雄背景故事——上古巨神
2020/06/28 DOTA
在Python程序员面试中被问的最多的10道题
2017/12/05 Python
python得到电脑的开机时间方法
2018/10/15 Python
对Python强大的可变参数传递机制详解
2019/06/13 Python
用Python批量把文件复制到另一个文件夹的实现方法
2019/08/16 Python
python zip()函数使用方法解析
2019/10/31 Python
python随机数分布random均匀分布实例
2019/11/27 Python
python多线程实现代码(模拟银行服务操作流程)
2020/01/13 Python
Django如何批量创建Model
2020/09/01 Python
python 爬虫之selenium可视化爬虫的实现
2020/12/04 Python
css3强大的动画效果animate使用说明及浏览器兼容介绍
2013/01/09 HTML / CSS
CSS3与动画有关的属性transition、animation、transform对比(史上最全版)
2017/08/18 HTML / CSS
交通文明倡议书
2014/05/16 职场文书
商铺门前三包责任书
2014/07/25 职场文书
个人年终总结怎么写
2015/03/09 职场文书
Nginx使用X-Accel-Redirect实现静态文件下载的统计、鉴权、防盗链、限速等
2021/04/04 Servers
完美处理python与anaconda环境变量的冲突问题
2021/04/07 Python
Redis特殊数据类型Geospatial地理空间
2022/06/01 Redis