最新最全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 相关文章推荐
网站当前的在线人数
Oct 09 PHP
PHP 开源框架22个简单简介
Aug 24 PHP
php getimagesize 上传图片的长度和宽度检测代码
May 15 PHP
php中使用接口实现工厂设计模式的代码
Jun 17 PHP
PHP获取数组中某元素的位置及array_keys函数应用
Jan 29 PHP
PHP的MVC模式实现原理分析(一相简单的MVC框架范例)
Apr 29 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
Aug 19 PHP
php以post形式发送xml的方法
Nov 04 PHP
护卫神php套件 php版本升级方法(php5.5.24)
May 10 PHP
php生成毫秒时间戳的实例讲解
Sep 22 PHP
PHP批斗大会之缺失的异常详解
Jul 09 PHP
laravel添加前台跳转成功页面示例
Oct 22 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
如何实现给定日期的若干天以后的日期
2006/10/09 PHP
php后台程序与Javascript的两种交互方式
2009/10/25 PHP
PHP正则的Unknown Modifier错误解决方法
2010/03/02 PHP
基于php split()函数的用法详解
2013/06/05 PHP
PHP图片裁剪函数(保持图像不变形)
2014/05/04 PHP
ThinkPHP模板中数组循环实例
2014/10/30 PHP
php基本函数汇总
2015/07/09 PHP
PHP实现的随机IP函数【国内IP段】
2016/07/20 PHP
PHP会员找回密码功能的简单实现
2016/09/05 PHP
Thinkphp 框架扩展之应用模式实现方法分析
2020/04/27 PHP
使用javascript访问XML数据的实例
2006/12/27 Javascript
JQuery 图片的展开和伸缩实例讲解
2013/04/18 Javascript
jquery的ajaxSubmit()异步上传图片并保存表单数据演示代码
2013/06/04 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐)
2016/06/23 Javascript
快速掌握jQuery插件WebUploader文件上传
2016/11/07 Javascript
JS简单判断函数是否存在的方法
2017/02/13 Javascript
js实现Tab选项卡切换效果
2020/07/17 Javascript
JavaScript实现简单的隐藏式侧边栏功能示例
2018/08/31 Javascript
js取小数点后两位四种方法
2019/01/18 Javascript
vue实现弹幕功能
2019/10/25 Javascript
javascript实现移动端上传图片功能
2020/08/18 Javascript
Python 实现数据库更新脚本的生成方法
2017/07/09 Python
http请求 request失败自动重新尝试代码示例
2018/01/25 Python
tensorflow: 查看 tensor详细数值方法
2018/06/13 Python
python实现画五角星和螺旋线的示例
2019/01/20 Python
Centos7 下安装最新的python3.8
2019/10/28 Python
Pycharm中配置远程Docker运行环境的教程图解
2020/06/11 Python
基于第一个PhoneGap(cordova)的应用详解
2013/05/03 HTML / CSS
护理职业生涯规划书
2014/01/24 职场文书
《我的信念》教学反思
2014/02/15 职场文书
宿舍违规用电检讨书
2014/02/16 职场文书
企业员工培训感言
2014/02/26 职场文书
五四青年节的活动方案
2014/08/20 职场文书
2016年毕业实习心得体会范文
2015/10/09 职场文书
Oracle笔记
2021/04/05 Oracle
全面盘点MySQL中的那些重要日志文件
2021/11/27 MySQL