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 相关文章推荐
如何实现给定日期的若干天以后的日期
Oct 09 PHP
批量修改RAR文件注释的php代码
Nov 20 PHP
php学习笔记 面向对象中[接口]与[多态性]的应用
Jun 16 PHP
php function用法如何递归及return和echo区别
Mar 07 PHP
ThinkPHP上使用多说评论插件的方法
Oct 31 PHP
php查询whois信息的方法
Jun 08 PHP
PHP使用file_get_content设置头信息的方法
Feb 14 PHP
ajax+php实现无刷新验证手机号的实例
Dec 22 PHP
PHP实现合并两个排序链表的方法
Jan 19 PHP
php微信公众号开发之秒杀
Oct 20 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
Oct 01 PHP
关于laravel 数据库迁移中integer类型是无法指定长度的问题
Oct 09 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
ThinkPHP模板范围判断输出In标签与Range标签用法详解
2014/06/30 PHP
php随机抽奖实例分析
2015/03/04 PHP
基于CI框架的微信网页授权库示例
2016/11/25 PHP
Js中sort()方法的用法
2006/11/04 Javascript
Javascript计算时间差的函数分享
2011/07/04 Javascript
c#和Javascript操作同一json对象的实现代码
2012/01/17 Javascript
早该知道的7个JavaScript技巧
2013/03/27 Javascript
javascript页面动态显示时间变化示例代码
2013/12/18 Javascript
js判断变量初始化的三种形式及推荐用的形式
2014/07/22 Javascript
jquery取子节点及当前节点属性值的方法
2014/09/09 Javascript
简单讲解AngularJS的Routing路由的定义与使用
2016/03/05 Javascript
Bootstrap~多级导航(级联导航)的实现效果【附代码】
2016/03/08 Javascript
seaJs使用心得之exports与module.exports的区别实例分析
2017/10/13 Javascript
jQuery实现checkbox即点即改批量删除及中间遇到的坑
2017/11/11 jQuery
详解使用React进行组件库开发
2018/02/06 Javascript
swiper.js插件实现pc端文本上下滑动功能示例
2018/12/03 Javascript
详解nuxt 微信公众号支付遇到的问题与解决
2019/08/26 Javascript
详解小程序如何改变onLoad的执行时机
2019/11/01 Javascript
JavaScript运动原理基础知识详解
2020/04/02 Javascript
[43:35]TI4 循环赛第二日Liquid vs Fnatic
2014/07/11 DOTA
Python设计模式之观察者模式简单示例
2018/01/10 Python
Python通过socketserver处理多个链接
2020/03/18 Python
Python pip安装模块提示错误解决方案
2020/05/22 Python
keras实现VGG16 CIFAR10数据集方式
2020/07/07 Python
深入了解Python装饰器的高级用法
2020/08/13 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
2020/09/25 Python
CSS3 Flexbox中flex-shrink属性的用法示例介绍
2013/12/30 HTML / CSS
Topshop法国官网:英国快速时尚品牌
2018/04/08 全球购物
优秀毕业生就业推荐信
2014/05/22 职场文书
服务行业口号
2014/06/11 职场文书
科技节口号
2014/06/19 职场文书
优秀团员事迹材料1000字
2014/08/20 职场文书
无罪辩护词范文
2015/05/21 职场文书
单身证明范本
2015/06/15 职场文书
图书借阅制度范本
2015/08/06 职场文书
解决golang结构体tag编译错误的问题
2021/05/02 Golang