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 相关文章推荐
PHP XML操作类DOMDocument
Dec 16 PHP
php设计模式 Prototype (原型模式)代码
Jun 26 PHP
PHP教程之PHP中shell脚本的使用方法分享
Feb 23 PHP
php输出xml必须header的解决方法
Oct 17 PHP
WordPress中Gravatar头像缓存到本地及相关优化的技巧
Dec 19 PHP
PHP-FPM实现性能优化
Mar 31 PHP
深入浅析yii2-gii自定义模板的方法
Apr 26 PHP
PHP实现生成带背景的图形验证码功能
Oct 03 PHP
php实现xml转换数组的方法示例
Feb 03 PHP
使用php实现网站验证码功能【推荐】
Feb 09 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
Aug 31 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
Nov 10 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 split汉字
2009/06/05 PHP
ThinkPHP独立分组使用的注意事项
2014/11/25 PHP
php去掉文件前几行的方法
2015/07/29 PHP
Laravel Memcached缓存驱动的配置与应用方法分析
2016/10/08 PHP
更优雅的事件触发兼容
2011/10/24 Javascript
Javascript Request获取请求参数如何实现
2012/11/28 Javascript
JQuery+CSS实现图片上放置按钮的方法
2015/05/29 Javascript
jquery实现根据浏览器窗口大小自动缩放图片的方法
2015/07/17 Javascript
canvas的神奇用法
2017/02/03 Javascript
原生JavaScript实现Tooltip浮动提示框特效
2017/03/07 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
2020/03/28 Javascript
BootStrap实现文件上传并带有进度条效果
2017/09/11 Javascript
JavaScript实现HTML5游戏断线自动重连的方法
2017/09/18 Javascript
浅谈vue项目可以从哪些方面进行优化
2018/05/05 Javascript
vue打包之后生成一个配置文件修改接口的方法
2018/12/09 Javascript
JS无限级导航菜单实现方法
2019/01/05 Javascript
JS使用H5实现图片预览功能
2019/09/30 Javascript
[01:38]2018DOTA2亚洲邀请赛主赛事第二日现场采访 神秘商人痛陈生计不易
2018/04/05 DOTA
使用 Python 获取 Linux 系统信息的代码
2014/07/13 Python
python使用正则表达式提取网页URL的方法
2015/05/26 Python
Python完成哈夫曼树编码过程及原理详解
2019/07/29 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
2019/08/07 Python
加拿大百叶窗和窗帘定制网站:Blinds
2017/01/30 全球购物
大学生秋游活动方案
2014/02/17 职场文书
《夏夜多美》教学反思
2014/02/17 职场文书
经典洗发水广告词
2014/03/13 职场文书
白岩松演讲
2014/05/21 职场文书
写给孩子的新学期寄语
2015/02/27 职场文书
检察院起诉书
2015/05/20 职场文书
2016父亲节感恩话语
2015/12/09 职场文书
2016入党积极分子党课培训心得体会
2016/01/06 职场文书
vue3中的组件间通信
2021/03/31 Vue.js
vue完美实现el-table列宽自适应
2021/05/08 Vue.js
pandas DataFrame.shift()函数的具体使用
2021/05/24 Python
浅谈Python numpy创建空数组的问题
2021/05/25 Python
Django+Nginx+uWSGI 定时任务的实现方法
2022/01/22 Python