PHP生成图像验证码的方法小结(2种方法)


Posted in PHP onJuly 18, 2016

本文实例讲述了PHP生成图像验证码的方法。分享给大家供大家参考,具体如下:

1、生成加法运算验证码图片

session_start ();
/*定义头文件为图片*/
header("Content-type: image/png");
/*生成验证码*/
/*创建图片设置字体颜色*/
$im = imagecreate($w, $h);
$red = imagecolorallocate($im, 255, 255, 255);
$white = imagecolorallocate($im, 255, 255, 255);
/*随机生成两个数字*/
$num1 = rand(1, 20);
$num2 = rand(1, 20);
$_SESSION ["administratorConfirmCode"] = $num1+$num2;
/*设置图片背景颜色*/
$gray = imagecolorallocate($im, 118, 151, 199);
$black = imagecolorallocate($im, mt_rand(0, 100), mt_rand(0, 100), mt_rand(0, 100));
/*创建图片背景*/
imagefilledrectangle($im, 0, 0, 100, 24, $black);
/*在画布上随机生成大量点*/
for ($i = 0; $i < 80; $i++) {
  imagesetpixel($im, rand(0, $w), rand(0, $h), $gray);
}
/*将计算验证码写入到图片中*/
imagestring($im, 5, 5, 4, $num1, $red);
imagestring($im, 5, 30, 3, "+", $red);
imagestring($im, 5, 45, 4, $num2, $red);
imagestring($im, 5, 70, 3, "=", $red);
imagestring($im, 5, 80, 2, "?", $white);
/*输出图片*/
imagepng($im);
imagedestroy($im);

2、生成字符验证码图片【值得注意的是在字体哪里,需要引入实际的字体路径,否则,可能出现图像显示不了验证码】

session_start ();
/*设置文件头为图片输出*/
Header("Content-type: image/JPEG");
/*调用生成验证码函数*/
$str="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234565789";
$result="";
for($i=0;$i<$length;$i++){
  $num[$i]=rand(0,61);
  $result.=$str[$num[$i]];
}
$text = $result;
$_SESSION ["administratorConfirmCode"] = $text;
/*设置图片的宽度和高度*/
$im_x = $w;
$im_y = $y;
/*创建图片*/
$im = imagecreatetruecolor($im_x,$im_y);
$text_c = ImageColorAllocate($im, mt_rand(0,100),mt_rand(0,100),mt_rand(0,100));
$tmpC0=mt_rand(100,255);
$tmpC1=mt_rand(100,255);
$tmpC2=mt_rand(100,255);
$buttum_c = ImageColorAllocate($im,$tmpC0,$tmpC1,$tmpC2);
imagefill($im, 16, 13, $buttum_c);
/*字体文件*/
$font = _WEB_DIR_.'/font/comic.ttf';
for ($i=0;$i<strlen($text);$i++){
  $tmp =substr($text,$i,1);
  $array = array(-1,1);
  $p = array_rand($array);
  $an = $array[$p]*mt_rand(1,10);//角度
  $size = 28;
  imagettftext($im, $size, $an, 15+$i*$size, 35, $text_c, $font, $tmp);
}
/*将字符写入文件中*/
$distortion_im = imagecreatetruecolor ($im_x, $im_y);
imagefill($distortion_im, 16, 13, $buttum_c);
for ( $i=0; $i<$im_x; $i++) {
  for ( $j=0; $j<$im_y; $j++) {
    $rgb = imagecolorat($im, $i , $j);
    if( (int)($i+20+sin($j/$im_y*2*M_PI)*10) <= imagesx($distortion_im)&& (int)($i+20+sin($j/$im_y*2*M_PI)*10) >=0 ) {
      imagesetpixel ($distortion_im, (int)($i+10+sin($j/$im_y*2*M_PI-M_PI*0.1)*4) , $j , $rgb);
    }
  }
}
/*干扰元素点的数量*/
$count = 160;
/*创建干扰元素点*/
for($i=0; $i<$count; $i++){
  $randcolor = ImageColorallocate($distortion_im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
  imagesetpixel($distortion_im, mt_rand()%$im_x , mt_rand()%$im_y , $randcolor);
}
/*创建干扰线条*/
$rand = mt_rand(5,30);
$rand1 = mt_rand(15,25);
$rand2 = mt_rand(5,10);
for ($yy=$rand; $yy<=+$rand+2; $yy++){
  for ($px=-80;$px<=80;$px=$px+0.1){
    $x=$px/$rand1;
    if ($x!=0){
      $y=sin($x);
    }
    $py=$y*$rand2;
    imagesetpixel($distortion_im, $px+80, $py+$yy, $text_c);
  }
}
/*以PNG格式将图像输出到浏览器*/
ImagePNG($distortion_im);
/*销毁图像*/
ImageDestroy($distortion_im);
ImageDestroy($im);

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
很实用的一个完整email发送程序
Oct 09 PHP
PHP+MYSQL 出现乱码的解决方法
Aug 08 PHP
PHP URL路由类实例
Nov 12 PHP
PHP根据IP判断地区名信息的示例代码
Mar 03 PHP
Yii框架获取当前controlle和action对应id的方法
Dec 03 PHP
PHP获取数组的键与值方法小结
Jun 13 PHP
详解HTTP Cookie状态管理机制
Jan 14 PHP
PHP+sqlite数据库操作示例(创建/打开/插入/检索)
May 26 PHP
php 变量引用与变量销毁机制详细介绍
Dec 05 PHP
PHP中include()与require()的区别说明
Feb 14 PHP
PHP数组去重的更快实现方式分析
May 09 PHP
thinkphp5.1框架模板布局与模板继承用法分析
Jul 19 PHP
Yii2中DropDownList简单用法示例
Jul 18 #PHP
Yii2使用dropdownlist实现地区三级联动功能的方法
Jul 18 #PHP
Yii2框架dropDownList下拉菜单用法实例分析
Jul 18 #PHP
用HTML/JS/PHP方式实现页面延时跳转的简单实例
Jul 18 #PHP
浅谈PHP正则中的捕获组与非捕获组
Jul 18 #PHP
Yii2.0表关联查询实例分析
Jul 18 #PHP
php 实现301重定向跳转实例代码
Jul 18 #PHP
You might like
供参考的 php 学习提高路线分享
2011/10/23 PHP
php 搜索框提示(自动完成)实例代码
2012/02/05 PHP
php实现上传图片生成缩略图示例
2014/04/13 PHP
discuz目录文件资料汇总
2014/12/30 PHP
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
2015/09/23 PHP
thinkPHP框架可添加js事件的分页类customPage.class.php完整实例
2017/03/16 PHP
PHP+mysql实现的三级联动菜单功能示例
2019/02/15 PHP
JavaScript入门教程 Cookies
2009/01/31 Javascript
实现超用户体验 table排序javascript实现代码
2009/06/22 Javascript
基于jquery的放大镜效果
2012/05/30 Javascript
jquery点击页面任何区域实现鼠标焦点十字效果
2013/06/21 Javascript
JavaScript禁止页面操作的示例代码
2013/12/17 Javascript
jquery中attr和prop的区别分析
2015/03/16 Javascript
在JavaScript中操作数组之map()方法的使用
2015/06/09 Javascript
Bootstrap Metronic完全响应式管理模板之菜单栏学习笔记
2016/07/08 Javascript
JS判断是否为JSON对象及是否存在某字段的方法(推荐)
2016/11/29 Javascript
Validform验证时可以为空否则按照指定格式验证
2017/10/20 Javascript
微信小程序canvas分享海报功能
2019/10/31 Javascript
python三元运算符实现方法
2013/12/17 Python
Python将xml和xsl转换为html的方法
2015/03/10 Python
Python解析json文件相关知识学习
2016/03/01 Python
Python实现屏幕截图的两种方式
2018/02/05 Python
Python可变参数*args和**kwargs用法实例小结
2018/04/27 Python
有关Python的22个编程技巧
2018/08/29 Python
Pandas 按索引合并数据集的方法
2018/11/15 Python
关于Python3 类方法、静态方法新解
2019/08/30 Python
一文带你掌握Pyecharts地理数据可视化的方法
2021/02/06 Python
CSS实现限制字数功能当对象内文本溢出时显示省略标记
2014/08/20 HTML / CSS
信息管理与信息系统专业求职信
2014/06/21 职场文书
2014年学校安全工作总结
2014/11/13 职场文书
2014最新股权信托合同协议书
2014/11/18 职场文书
苦儿流浪记读书笔记
2015/07/01 职场文书
《围炉夜话》110句人生箴言,精辟有内涵,引人深思
2019/10/23 职场文书
python opencv检测直线 cv2.HoughLinesP的实现
2021/06/18 Python
nginx.conf配置文件结构小结
2022/04/08 Servers
MySQL详细讲解变量variables的用法
2022/06/21 MySQL