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加速的eAccelerator dll支持文件打包下载
Sep 30 PHP
php 随机记录mysql rand()造成CPU 100%的解决办法
May 18 PHP
PHP文章按日期(月日)SQL归档语句
Nov 29 PHP
php添加文章时生成静态HTML文章的实现代码
Feb 17 PHP
PHP APC的安装与使用详解
Jun 13 PHP
PHP魔术引号所带来的安全问题分析
Jul 15 PHP
php实现cookie加密的方法
Mar 10 PHP
CodeIgniter分页类pagination使用方法示例
Mar 28 PHP
php遍历解析xml字符串的方法
May 05 PHP
PHP 断点续传实例详解
Nov 11 PHP
PHP开发中解决并发问题的几种实现方法分析
Nov 13 PHP
PHP获取类私有属性的3种方法
Sep 10 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
Symfony2创建基于域名的路由相关示例
2016/11/14 PHP
php导出csv文件,可导出前导0实例代码
2016/11/16 PHP
PHP 实现浏览记录并按日期分组
2017/05/11 PHP
网页中实现浏览器的最大,最小化和关闭按钮
2007/03/12 Javascript
基于jquery的tab切换 js原理
2010/04/01 Javascript
js href的用法
2010/05/13 Javascript
js中if语句的几种优化代码写法
2011/03/12 Javascript
javascript实现颜色渐变的方法
2013/10/30 Javascript
浅谈js的setInterval事件
2014/12/05 Javascript
js模仿java的Map集合详解
2016/01/06 Javascript
基于JavaScript短信验证码如何实现
2016/01/24 Javascript
javascript HTML5文件上传FileReader API
2020/03/27 Javascript
jQuery根据name属性进行查找的用法分析
2016/06/23 Javascript
bootstrap下拉菜单使用方法解析
2017/01/13 Javascript
vue.js中实现登录控制的方法示例
2018/04/23 Javascript
微信小程序实现城市列表选择
2018/06/05 Javascript
Vue引用Swiper4插件无法重写分页器样式的解决方法
2018/09/27 Javascript
Vue表情输入组件 微信face表情组件
2019/02/11 Javascript
ES6中Symbol、Set和Map用法详解
2019/08/20 Javascript
基于Vue 撸一个指令实现拖拽功能
2019/10/09 Javascript
解决vue elementUI中table里数字、字母、中文混合排序问题
2020/01/07 Javascript
python虚拟环境 virtualenv的简单使用
2020/01/21 Javascript
Vue在H5 项目中使用融云进行实时个人单聊通讯
2020/12/14 Vue.js
python基于xmlrpc实现二进制文件传输的方法
2015/06/02 Python
python3 打开外部程序及关闭的示例
2018/11/06 Python
瑞典首都斯德哥尔摩的多元奢侈时尚品牌:Acne Studios
2017/07/09 全球购物
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
应届大学生自荐书
2014/06/17 职场文书
党委班子剖析材料
2014/08/21 职场文书
献爱心大型公益活动策划方案
2014/09/15 职场文书
投资入股合作协议书
2014/10/28 职场文书
怎样写辞职信
2015/02/27 职场文书
运动会观后感
2015/06/09 职场文书
2016党风廉政建设心得体会范文
2016/01/25 职场文书
女性励志书籍推荐
2019/08/19 职场文书
餐饮行业关注的9大营销策略
2019/08/26 职场文书