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 相关文章推荐
PHP系统流量分析的程序
Oct 09 PHP
真正的ZIP文件操作类(php)
Jul 21 PHP
PHP获取类中常量,属性,及方法列表的方法
Apr 09 PHP
php 代码优化之经典示例
Mar 24 PHP
php实现自动获取生成文章主题关键词功能的深入分析
Jun 03 PHP
PHP的preg_match匹配字符串长度问题解决方法
May 03 PHP
如何让CI框架支持service层
Oct 29 PHP
5款适合PHP使用的HTML编辑器推荐
Jul 03 PHP
yii2整合百度编辑器umeditor及umeditor图片上传问题的解决办法
Apr 20 PHP
php封装一个异常的处理类
Jun 08 PHP
php实现获取农历(阴历)、节日、节气的类与用法示例
Nov 20 PHP
php封装实现钉钉机器人报警接口的示例代码
Aug 08 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聊天室技术
2006/10/09 PHP
用js实现预览待上传的本地图片
2007/03/15 Javascript
javascript使用activex控件的代码
2011/01/27 Javascript
node.js正则表达式获取网页中所有链接的代码实例
2014/06/03 Javascript
jQuery学习总结之jQuery事件
2014/06/30 Javascript
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
2014/10/16 Javascript
实例讲解JQuery中this和$(this)区别
2014/12/08 Javascript
浅谈NodeJS中require路径问题
2015/05/07 NodeJs
浅谈$(document)和$(window)的区别
2015/07/15 Javascript
详解jQuery中的元素的属性和相关操作
2015/08/14 Javascript
Node.js模块封装及使用方法
2016/03/06 Javascript
把json格式的字符串转换成javascript对象或数组的方法总结
2016/11/03 Javascript
ES6中Symbol类型用法实例详解
2017/04/06 Javascript
微信小程序自定义组件
2017/08/16 Javascript
package.json配置文件构成详解
2019/08/27 Javascript
原生JavaScript创建不可变对象的方法简单示例
2020/05/07 Javascript
通过实例了解JS执行上下文运行原理
2020/06/17 Javascript
使用python绘制人人网好友关系图示例
2014/04/01 Python
Python实现去除列表中重复元素的方法小结【4种方法】
2018/04/27 Python
python实现简易数码时钟
2021/02/19 Python
python交互界面的退出方法
2019/02/16 Python
Django重置migrations文件的方法步骤
2019/05/01 Python
python实现tail实时查看服务器日志示例
2019/12/24 Python
python使用ctypes调用扩展模块的实例方法
2020/01/28 Python
Python reshape的用法及多个二维数组合并为三维数组的实例
2020/02/07 Python
Python3之外部文件调用Django程序操作model等文件实现方式
2020/04/07 Python
加拿大高尔夫超市:Golf Town
2018/01/12 全球购物
WoolOvers澳洲官方网站:英国针织服装公司
2018/05/13 全球购物
泰国排名第一的家居用品中心:HomePro
2020/11/18 全球购物
简短大学毕业感言
2014/01/18 职场文书
药学专业学生的自我评价分享
2014/02/06 职场文书
质量承诺书范文
2014/03/27 职场文书
初中班主任评语
2014/04/24 职场文书
纪检干部现实表现材料
2014/08/21 职场文书
2014年大学生村官工作总结
2014/11/19 职场文书
MySQL分区以及建索引的方法总结
2022/04/13 MySQL