PHP生成制作验证码的简单实例


Posted in PHP onJune 12, 2016

看完就会,不会你打我,话不多说、开搞(人狠话不多

1.0 首先先看代码

<?php
header("Content-Type:text/html;Charset=UTF-8");// 设置页面的编码风格
header("Content-Type:image/jpeg");// 通知浏览器输出的是jpeg格式的图像

$img = imagecreatetruecolor(150,50);//创建画布并设置大小 x轴150 y轴50

$bgcolor = imagecolorallocate($img, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));//分配背景颜色
imagefill($img, 0, 0, $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-8");// 设置页面的编码风格
header("Content-Type:image/jpeg");// 通知浏览器输出的是jpeg格式的图像

$img = imagecreatetruecolor(150,50);//创建画布并设置大小 x轴150 y轴50

$bgcolor = imagecolorallocate($img, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));//分配背景颜色

//添加干扰线,并循环3次,背景颜色随机
for($i=0;$i<3;$i++){

  $linecolor = imagecolorallocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
  imageline($img, mt_rand(0,150), mt_rand(0,50), mt_rand(0,150), mt_rand(0,50), $linecolor);

}
//添加干扰点,并循环25次,背景颜色随机
for($i=0;$i<25;$i++){

  $dotcolor = imagecolorallocate($img, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));
  imagesetpixel($img, mt_rand(0,150), mt_rand(0,60), $dotcolor);

}

imagefill($img, 0, 0, $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-8");// 设置页面的编码风格
header("Content-Type:image/jpeg");// 通知浏览器输出的是jpeg格式的图像

$img = imagecreatetruecolor(150,50);//创建画布并设置大小 x轴150 y轴50

$bgcolor = imagecolorallocate($img, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));//分配背景颜色

//添加干扰线,并循环3次,背景颜色随机
for($i=0;$i<3;$i++){

  $linecolor = imagecolorallocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
  imageline($img, mt_rand(0,150), mt_rand(0,50), mt_rand(0,150), mt_rand(0,50), $linecolor);

}
//添加干扰点,并循环25次,背景颜色随机
for($i=0;$i<25;$i++){

  $dotcolor = imagecolorallocate($img, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));
  imagesetpixel($img, mt_rand(0,150), mt_rand(0,60), $dotcolor);

}

//添加需要验证的字母或者数字
$rand_str = "qwertyuiopasdfghjklzxcvbnm1234567890";//需要使用到验证的一些字母和数字
$str_arr = array();  //命名一个数组
for($i = 0;$i<4;$i++){  //循环4次,就是有四个随机的字母或者数字              
  $pos = mt_rand(0,strlen($rand_str)-1);
  $str_arr[] = $rand_str[$pos];//临时交换
}

$x_start=150/4;//单个字符X轴位置

foreach ($str_arr as $key) {
  $fontcolor = imagecolorallocate($img, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));
  imagettftext($img, 25, mt_rand(-15,15), $x_start, 50/2, $fontcolor, "C:/Windows/Fonts/Verdana.TTF", $key);
  $x_start +=20;//遍历后单个字符沿X轴 +20
}

imagefill($img, 0, 0, $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的list()的一步操作给一组变量进行赋值的使用
May 18 PHP
php 模拟get_headers函数的代码示例
Apr 27 PHP
Window下PHP三种运行方式图文详解
Jun 11 PHP
PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法
May 06 PHP
PHP把MSSQL数据导入到MYSQL的方法
Dec 27 PHP
PHP借助phpmailer发送邮件
May 11 PHP
[原创]php求圆周率的简单实现方法
May 30 PHP
使用php实现网站验证码功能【推荐】
Feb 09 PHP
laravel中的一些简单实用功能
Nov 03 PHP
Laravel框架验证码类用法实例分析
Sep 11 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
Feb 27 PHP
Yii框架安装简明教程
May 15 PHP
php gd等比例缩放压缩图片函数
Jun 12 #PHP
详解PHP中cookie和session的区别及cookie和session用法小结
Jun 12 #PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
Jun 12 #PHP
最新最全PHP生成制作验证码代码详解(推荐)
Jun 12 #PHP
再谈PHP中单双引号的区别详解
Jun 12 #PHP
PHP中strpos、strstr和stripos、stristr函数分析
Jun 11 #PHP
linux下php上传文件注意事项
Jun 11 #PHP
You might like
全国FM电台频率大全 - 19 广东省
2020/03/11 无线电
利用js调用后台php进行数据处理原码
2006/10/09 PHP
PHP的PDO常用类库实例分析
2016/04/07 PHP
laravel 5.3中自定义加密服务的方案详解
2017/05/09 PHP
php命令行写shell实例详解
2018/07/19 PHP
PhpStorm连接服务器并实现自动上传功能
2020/12/09 PHP
JavaScript 动态创建VML的方法
2009/10/14 Javascript
juqery 学习之五 文档处理 插入
2011/02/11 Javascript
jQuery之选择组件的深入解析
2013/06/19 Javascript
在JavaScript里嵌入大量字符串常量的实现方法
2013/07/07 Javascript
jQuery获取Radio,CheckBox选择的Value值(示例代码)
2013/12/12 Javascript
jquery.cookie用法详细解析
2013/12/18 Javascript
jquery.Ajax()方法调用Asp.Net后台的方法解析
2014/02/13 Javascript
js 加密压缩出现bug解决方案
2014/11/25 Javascript
Javascript中String的常用方法实例分析
2015/06/13 Javascript
详解JS: reduce方法实现 webpack多文件入口
2017/02/14 Javascript
React Native之prop-types进行属性确认详解
2017/12/19 Javascript
茶余饭后聊聊Vue3.0响应式数据那些事儿
2019/10/30 Javascript
Openlayers显示地理位置坐标的方法
2020/09/28 Javascript
Python的批量远程管理和部署工具Fabric用法实例
2015/01/23 Python
Python的Flask框架中Flask-Admin库的简单入门指引
2015/04/07 Python
利用Python为iOS10生成图标和截屏
2016/09/24 Python
python进阶_浅谈面向对象进阶
2017/08/17 Python
python中os和sys模块的区别与常用方法总结
2017/11/14 Python
在windows下Python打印彩色字体的方法
2018/05/15 Python
Django 日志配置按日期滚动的方法
2019/01/31 Python
python3-flask-3将信息写入日志的实操方法
2019/11/12 Python
Python3运算符常见用法分析
2020/02/14 Python
python将字典内容写入json文件的实例代码
2020/08/12 Python
请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
2015/07/16 面试题
思想政治自我鉴定
2013/10/06 职场文书
职业生涯规划书范文
2014/03/10 职场文书
法制报告会主持词
2014/04/02 职场文书
学习型班组申报材料
2014/05/31 职场文书
A22国内电台短波广播频率表
2022/05/10 无线电
详解ZABBIX监控ESXI主机的问题
2022/06/21 Servers