最新最全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+javascript实现二级级联菜单的制作
May 06 PHP
PHP pathinfo()获得文件的路径、名称等信息说明
Sep 13 PHP
PHP写日志的实现方法
Nov 05 PHP
php判断类是否存在函数class_exists用法分析
Nov 14 PHP
PHP实现无限极分类图文教程
Nov 25 PHP
PHP处理postfix邮件内容的方法
Jun 16 PHP
PHP生成树的方法
Jul 28 PHP
PHP基于yii框架实现生成ICO图标
Nov 13 PHP
yii用户注册表单验证实例
Dec 26 PHP
PHP内核学习教程之php opcode内核实现
Jan 27 PHP
PHP获取input输入框中的值去数据库比较显示出来
Nov 16 PHP
PHP正则表达式函数preg_replace用法实例分析
Jun 04 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时区转换转换函数
2014/01/07 PHP
php递归删除目录下的文件但保留的实例分享
2014/05/10 PHP
php图片的二进制转换实现方法
2014/12/15 PHP
php实现网站顶踩功能的完整前端代码
2015/07/19 PHP
CI框架AR操作(数组形式)实现插入多条sql数据的方法
2016/05/18 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
js 数组实现一个类似ruby的迭代器
2009/10/27 Javascript
jquery创建一个新的节点对象(自定义结构/内容)的好方法
2013/01/21 Javascript
JavaScript中的substr()方法使用详解
2015/06/06 Javascript
js实现汉字排序的方法
2015/07/23 Javascript
第五章之BootStrap 栅格系统
2016/04/25 Javascript
js基于cookie方式记住返回页面用法示例
2016/05/27 Javascript
JSON字符串转换JSONObject和JSONArray的方法
2016/06/03 Javascript
DOM操作原生js 的bug,使用jQuery 可以消除的解决方法
2016/09/04 Javascript
js弹出窗口简单实现代码
2017/03/22 Javascript
JavaScript canvas实现围绕旋转动画
2017/11/18 Javascript
js删除数组中的元素delete和splice的区别详解
2018/02/03 Javascript
理理Vue细节(推荐)
2019/04/16 Javascript
layui数据表格实现重载数据表格功能(搜索功能)
2019/07/27 Javascript
[01:31:22]Ti4 循环赛第四日附加赛LGD vs Mouz
2014/07/13 DOTA
Python Deque 模块使用详解
2014/07/04 Python
基于asyncio 异步协程框架实现收集B站直播弹幕
2016/09/11 Python
python MNIST手写识别数据调用API的方法
2018/08/08 Python
python 使用socket传输图片视频等文件的实现方式
2019/08/07 Python
python 申请内存空间,用于创建多维数组的实例
2019/12/02 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
2020/04/28 Python
HTML5之SVG 2D入门9—蒙板及mask元素介绍与应用
2013/01/30 HTML / CSS
Tom Dixon官网:英国照明及家具设计和制造公司
2019/03/01 全球购物
建筑工程专业毕业生自荐信
2013/10/19 职场文书
服装发布会策划方案
2014/05/22 职场文书
2014年变电站工作总结
2014/12/19 职场文书
2015年六一儿童节活动总结
2015/02/11 职场文书
社区国庆节活动总结
2015/03/23 职场文书
律师函格式范本
2015/05/27 职场文书
2016年保险公众宣传日活动总结
2016/04/05 职场文书
python树莓派通过队列实现进程交互的程序分析
2021/07/04 Python