最新最全PHP生成制作验证码代码详解(推荐)


Posted in PHP onJune 12, 2016

1.0

首先先看代码

<?php
header("Content-Type:text/html;Charset=UTF-");// 设置页面的编码风格
header("Content-Type:image/jpeg");// 通知浏览器输出的是jpeg格式的图像
$img = imagecreatetruecolor(,);//创建画布并设置大小 x轴 y轴
$bgcolor = imagecolorallocate($img, mt_rand(,), mt_rand(,), mt_rand(,));//分配背景颜色
imagefill($img, , , $bgcolor); ////把背景填充到图像
imagejpeg($img); // 输出图像
imagedestroy($img); // 销毁图像
?>

好,现在结合以上代码,来分析分析以上用到的几个函数:

imagecreatetruecolor();

imagecreatetruecolor — 新建一个真彩色图像(感觉哇,那么长,其实仔细一看挺好记的 image/create/true/color,什么是真彩色图像?往下看)

resource imagecreatetruecolor ( int $width , int $height )

imagecreatetruecolor() 和 imagecreate()两个函数都能创建画布

resource imagecreate ( int $x_size , int $y_size )

imagecreatetruecolor()建立的是一幅大小为 x和 y的黑色图像(默认为黑色[即便叫法就是真彩色图像]),如想改变背景颜色则需

要用填充颜色函数 imagefill($img,0,0,$color);

imagecreate 新建一个空白图像资源,用imagecolorAllocate()添加背景色

上面两个函数只不过是一个功能的两种方法

imagecolorallocate();

imagecolorallocate — 为一幅图像分配颜色

int imagecolorallocate ( resource $image , int $red , int $green , int $blue )

颜色分别用 红 绿 蓝三色组合,这些参数是 0 到 255 的整数或者十六进制的 0x00 到 0xFF。

mt_rand();

mt_rand — 生成更好的随机数

int mt_rand ( int $min , int $max )

$min 可选的、返回的最小值(默认:0)

$max 可选的、返回的最大值(默认:mt_getrandmax())
这里就是用来让他随机生成背景颜色,0-255随便取值。所以页面没刷新一次画布背景颜色就不一样。效果图:

最新最全PHP生成制作验证码代码详解(推荐)

2.0

开始往里面做干扰线,干扰点。防止验证图像被秒识别

<?php
header("Content-Type:text/html;Charset=UTF-");// 设置页面的编码风格
header("Content-Type:image/jpeg");// 通知浏览器输出的是jpeg格式的图像
$img = imagecreatetruecolor(,);//创建画布并设置大小 x轴 y轴
$bgcolor = imagecolorallocate($img, mt_rand(,), mt_rand(,), mt_rand(,));//分配背景颜色
//添加干扰线,并循环次,背景颜色随机
for($i=;$i<;$i++){
$linecolor = imagecolorallocate($img,mt_rand(,),mt_rand(,),mt_rand(,));
imageline($img, mt_rand(,), mt_rand(,), mt_rand(,), mt_rand(,), $linecolor);
}
//添加干扰点,并循环次,背景颜色随机
for($i=;$i<;$i++){
$dotcolor = imagecolorallocate($img, mt_rand(,), mt_rand(,), mt_rand(,));
imagesetpixel($img, mt_rand(,), mt_rand(,), $dotcolor);
}
imagefill($img, , , $bgcolor); ////把背景填充到图像
imagejpeg($img); // 输出图像
imagedestroy($img); // 销毁图像
?>

函数分析:

imageline();

imageline — 画一条线段

bool imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )

imageline() 用 color 颜色在图像 image 中从坐标 x1,y1 到 x2,y2(图像左上角为 0, 0)画一条线段。

imageline($img, mt_rand(0,150), mt_rand(0,50), mt_rand(0,150), mt_rand(0,50), $linecolor);这里意思就是 画布$img 中从坐标 x1,y1 到 x2,y2随机

imagesetpixel();

imagesetpixel— 画一个单一像素

bool imagesetpixel ( resource $image , int $x , int $y , int $color )

imagesetpixel() 在 image 图像中用 color 颜色在 x,y 坐标(图像左上角为 0,0)上画一个点。

imagesetpixel($img, mt_rand(0,150), mt_rand(0,60), $dotcolor);具体含义同上

效果图:

最新最全PHP生成制作验证码代码详解(推荐)

3.0

添加验证字母数字

<?php
header("Content-Type:text/html;Charset=UTF-");// 设置页面的编码风格
header("Content-Type:image/jpeg");// 通知浏览器输出的是jpeg格式的图像
$img = imagecreatetruecolor(,);//创建画布并设置大小 x轴 y轴
$bgcolor = imagecolorallocate($img, mt_rand(,), mt_rand(,), mt_rand(,));//分配背景颜色
//添加干扰线,并循环次,背景颜色随机
for($i=;$i<;$i++){
$linecolor = imagecolorallocate($img,mt_rand(,),mt_rand(,),mt_rand(,));
imageline($img, mt_rand(,), mt_rand(,), mt_rand(,), mt_rand(,), $linecolor);
}
//添加干扰点,并循环次,背景颜色随机
for($i=;$i<;$i++){
$dotcolor = imagecolorallocate($img, mt_rand(,), mt_rand(,), mt_rand(,));
imagesetpixel($img, mt_rand(,), mt_rand(,), $dotcolor);
}
//添加需要验证的字母或者数字
$rand_str = "qwertyuiopasdfghjklzxcvbnm";//需要使用到验证的一些字母和数字
$str_arr = array(); //命名一个数组
for($i = ;$i<;$i++){ //循环次,就是有四个随机的字母或者数字 
$pos = mt_rand(,strlen($rand_str)-);
$str_arr[] = $rand_str[$pos];//临时交换
}
$x_start=/;//单个字符X轴位置
foreach ($str_arr as $key) {
$fontcolor = imagecolorallocate($img, mt_rand(,), mt_rand(,), mt_rand(,));
imagettftext($img, , mt_rand(-,), $x_start, /, $fontcolor, "C:/Windows/Fonts/Verdana.TTF", $key);
$x_start +=;//遍历后单个字符沿X轴 +
}
imagefill($img, , , $bgcolor); ////把背景填充到图像
imagejpeg($img); // 输出图像
imagedestroy($img); // 销毁图像
?>

函数:

imagettftext();

imagettftext — 用 TrueType 字体向图像写入文本

array imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )

分析下面的代码:

imagettftext($img, 25, mt_rand(-15,15), $x_start, 50/2, $fontcolor, "C:/Windows/Fonts/Verdana.TTF", $key);

$img-----------画布

25-----------字体的尺寸。

mt_rand(-15,15)----------角度制表示的角度,0 度为从左向右读的文本。更高数值表示逆时针旋转。例如 90 度表示从下向上读的文本。(就是字体角度的问题,)

$x_start----------通俗易懂的讲就是字符的X轴位置

50/2----------字符的高度

$fontcolor----------字符颜色

"C:/Windows/Fonts/Verdana.TTF"----------字符的字体样式路径

$key-----------遍历出后的字符

效果:

最新最全PHP生成制作验证码代码详解(推荐)

以上内容是本文给大家介绍的最新最全PHP生成制作验证码代码详解(推荐)的全部叙述,希望对大家有所帮助!

PHP 相关文章推荐
php Xdebug 调试扩展的安装与使用.
Mar 13 PHP
PHP 修复未正常关闭的HTML标签实现代码(支持嵌套和就近闭合)
Jun 07 PHP
php对csv文件的读取,写入,输出下载操作详解
Aug 10 PHP
PHP is_subclass_of函数的一个BUG和解决方法
Jun 01 PHP
PHP和javascript常用正则表达式及用法实例
Jul 01 PHP
php生成RSS订阅的方法
Feb 13 PHP
php实现四舍五入的方法小结
Mar 03 PHP
php版微信公众平台接口开发之智能回复开发教程
Sep 22 PHP
Android AsyncTack 异步任务实例详解
Nov 02 PHP
PHP实现数组和对象的相互转换操作示例
Mar 20 PHP
php文件包含的几种方式总结
Sep 19 PHP
Yii2.0框架behaviors方法使用实例分析
Sep 30 PHP
再谈PHP中单双引号的区别详解
Jun 12 #PHP
PHP中strpos、strstr和stripos、stristr函数分析
Jun 11 #PHP
linux下php上传文件注意事项
Jun 11 #PHP
php设计模式之单例模式代码
Jun 11 #PHP
浅谈PHP Cookie处理函数
Jun 10 #PHP
php单例模式的简单实现方法
Jun 10 #PHP
PHP操作mysql数据库分表的方法
Jun 09 #PHP
You might like
PHP mcrypt可逆加密算法分析
2011/07/19 PHP
ThinkPHP CURD方法之limit方法详解
2014/06/18 PHP
PHP正则匹配反斜杠'\'和美元'$'的方法
2017/02/08 PHP
用js实现的检测浏览器和系统的函数
2009/04/09 Javascript
asp(javascript)全角半角转换代码 dbc2sbc
2009/08/06 Javascript
js 静态动态成员 and 信息的封装和隐藏
2011/05/29 Javascript
jQuery实现表头固定效果的实例代码
2013/05/24 Javascript
javascript 获取模态窗口的滚动位置代码
2013/08/06 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
2014/05/28 Javascript
Jquery 分页插件之Jquery Pagination
2015/08/25 Javascript
详解js中构造流程图的核心技术JsPlumb
2015/12/08 Javascript
javascript RegExp 使用说明
2016/05/21 Javascript
Bootstrap源码解读媒体对象、列表组和面板(10)
2016/12/26 Javascript
微信小程序 利用css实现遮罩效果实例详解
2017/01/21 Javascript
基于JavaScript实现无缝滚动效果
2017/07/21 Javascript
温故知新——JavaScript中的字符串连接问题最全总结(推荐)
2017/08/21 Javascript
基于JavaScript的数据结构队列动画实现示例解析
2020/08/06 Javascript
巧用Python装饰器 免去调用父类构造函数的麻烦
2012/05/18 Python
Python实现的弹球小游戏示例
2017/08/01 Python
matplotlib savefig 保存图片大小的实例
2018/05/24 Python
Flask-Mail用法实例分析
2018/07/21 Python
python 地图经纬度转换、纠偏的实例代码
2018/08/06 Python
pycharm 将python文件打包为exe格式的方法
2019/01/16 Python
Python3实现的反转单链表算法示例
2019/03/08 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
2019/08/19 Python
用HTML5.0制作网页的教程
2010/05/30 HTML / CSS
维珍澳洲航空官网:Virgin Australia
2017/09/08 全球购物
美国豪华的多品牌精品店:The Webster
2019/07/31 全球购物
如何向接受结构参数的函数传入常数值
2016/02/17 面试题
什么是静态路由?什么是动态路由?各自的特点是什么?
2015/09/16 面试题
优秀教师先进事迹
2014/01/22 职场文书
行政工作个人的自我评价
2014/02/13 职场文书
旅游饭店管理专业自荐书
2014/06/28 职场文书
保护校园环境倡议书
2015/04/28 职场文书
请客吃饭开场白
2015/06/01 职场文书
vue中控制mock在开发环境使用,在生产环境禁用方式
2022/04/06 Vue.js