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在程序中将网页生成word文档并提供下载的代码
Oct 09 PHP
探讨Hessian在PHP中的使用分析
Jun 13 PHP
ThinkPHP多语言支持与多模板支持概述
Aug 22 PHP
php启用sphinx全文搜索的实现方法
Dec 24 PHP
PHP、Python和Javascript的装饰器模式对比
Feb 03 PHP
php实现的数字验证码及数字运算验证码
Jul 30 PHP
php实现无限级分类(递归方法)
Aug 06 PHP
Yii中的cookie的发送和读取
Jul 27 PHP
详解Yii2.0 rules验证规则集合
Mar 21 PHP
laravel框架关于搜索功能的实现
Mar 15 PHP
浅谈Laravel核心解读之Console内核
Dec 02 PHP
基于PHP实现堆排序原理及实例详解
Jun 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
安装ImageMagick出现error while loading shared libraries的解决方法
2014/09/23 PHP
PHP7+Nginx的配置与安装教程详解
2016/05/10 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
ajax java 实现自动完成功能
2012/12/19 Javascript
基于jQuery实现表单提交验证
2014/11/24 Javascript
javascript DIV实现跟随鼠标移动
2020/03/19 Javascript
JavaScript学习笔记之取数组中最大值和最小值
2016/03/23 Javascript
解决VUE框架 导致绑定事件的阻止冒泡失效问题
2018/02/24 Javascript
详解Vue实战指南之依赖注入(provide/inject)
2018/11/13 Javascript
微信小程序自定义带价格显示日历效果
2018/12/29 Javascript
微信小程序绑定手机号获取验证码功能
2019/10/22 Javascript
vue input标签通用指令校验的实现
2019/11/05 Javascript
js实现无缝轮播图
2020/03/09 Javascript
微信小程序间使用navigator跳转传值问题实例分析
2020/03/27 Javascript
vue项目中使用多选框的实例代码
2020/07/22 Javascript
Element中Slider滑块的具体使用
2020/07/29 Javascript
JavaScript的垃圾回收机制与内存管理
2020/08/06 Javascript
[42:24]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第一场 11.01
2020/11/02 DOTA
python实现猜数字游戏(无重复数字)示例分享
2014/03/29 Python
python中使用smtplib和email模块发送邮件实例
2014/04/22 Python
Python SQLite3数据库操作类分享
2014/06/10 Python
Python中动态获取对象的属性和方法的教程
2015/04/09 Python
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
2018/07/04 Python
基于django channel实现websocket的聊天室的方法示例
2019/04/11 Python
python之mock模块基本使用方法详解
2019/06/27 Python
Python 多个图同时在不同窗口显示的实现方法
2019/07/07 Python
python爬虫开发之selenium模块详细使用方法与实例全解
2020/03/09 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
2020/05/27 Python
关于CSS Tooltips(鼠标经过时显示)的效果
2013/04/10 HTML / CSS
全球最大的在线旅游公司:Expedia
2017/11/16 全球购物
市场营销专业个人自荐信格式
2013/09/21 职场文书
生物科学专业个人求职信范文
2013/12/05 职场文书
优秀少先队辅导员先进事迹材料
2014/05/18 职场文书
小学教师读书活动总结
2014/07/08 职场文书
化学工程专业求职信
2014/08/10 职场文书
工厂仓管员岗位职责
2015/04/01 职场文书