-
php 验证码图片程序
- <?php
- /*
- *文件名:class.safeCode.php
- *类名:safeCode
- *目的:生成web应用时所需的验证码图片
- *当前版本:1.0.2
- *作者:NoAngels
- *联系方式:flare_1023@163.com QQ:82535599 MSN:atizu@hotmail.com
- *更新内容:
- *版本1.0.2
- *1.更新了对linux主机支持,设置GDFONTPATH环境变量,
- * putenv('GDFONTPATH=' . realpath('.'));
- *2.对不支持antialias函数的时候避免采用此方法,避免低版本的GD库
- *版本1.0.1
- *1.更新了绘制指定类型图片,支持类型有:png,jpeg,gif.默认为png(此效果最佳)
- *2.优化了部分代码
- */
- class safeCode{
- function __construct(){
- #设置默认safe安全保护码
- $this->__safe = substr(md5(time()), 0 , 4);
- }
- function __destruct(){
- #释放资源
- unset($this->__img, $this->__canvasWidth, $this->__canvasHeight, $this->__codeLength, $this->__spacePerChar, $this->__code, $this->__safe, $this->__background, $this->__borderColor, $this->__colors, $this->__font, $this->__sessionName);
- }
- function setCanvas($width = 200, $height = 60){
- #设置画布宽度以及高度.有默认值
- $this->__canvasWidth = $width;
- $this->__canvasHeight = $height;
- $this->__img = imagecreatetruecolor($width, $height);
- return;
- }
- function setSafe($char){
- #设置安全码,不调用系统会自己设置
- $this->__safe = $char;
- return;
- }
- function setCodeLength($num = 8){
- #设置验证码长度
- $this->__codeLength = $num;
- }
- function setFont($fontName){
- #设置绘图时所用的字体,字体文件必须与类文件同目录
- $this->__font = $fontName;
- return;
- }
- function setBackground($arg1 = 255, $arg2 = 255, $arg3 = 255){
- #设置背景颜色
- $this->__background = imagecolorallocate($this->__img, $arg1, $arg2, $arg3);
- return;
- }
- function setBorderColor($arg1 = 128, $arg2 = 128, $arg3 = 128){
- #设置边框颜色
- $this->__borderColor = imagecolorallocate($this->__img, $arg1, $arg2, $arg3);
- }
- function setFontColor($arr){
- #设置绘图时所用颜色,参数为颜色集合数组
- foreach($arr as $color){
- $this->__colors[] = imagecolorallocate($this->__img, $color[0], $color[1], $color[2]);
- }
- return;
- }
- function setSession($sessionName = 'safeCode'){
- #设置session变量名,默认为$_SESSION['safeCode']
- $this->__sessionName = $sessionName;
- #$_SESSION[$sessionName] = $this->__code;
- return;
- }
- function display($type = 'png'){
- #显示图片,可指定显示类型,目前支持png(默认),jpeg,gif
- $this->__setSpacePerChar();
- imagefilledrectangle($this->__img, 1, 1, $this->__canvasWidth - 2, $this->__canvasHeight -2, $this->__background);
- imagerectangle($this->__img, 0, 0, $this->__canvasWidth - 1, $this->__canvasHeight - 1, $this->__borderColor);
- $this->__drawText($this->__colors, $this->__getCode(), $this->__font);
- #修正linux以及低版本的GD库问题
- if(function_exists(imageantialias)){
- imageantialias($this->__img, true);
- }
- $_SESSION[$this->__sessionName] = $this->__code;
- switch ($type){
- case 'png':
- header('Content-type:image/png');
- imagepng($this->__img);
- case 'jpeg':
- header('Content-type:image/jpeg');
- imagejpeg($this->__img, '' , 75);
- case 'gif':
- header('Content-type:image/gif');
- imagegif($this->__img);
- default:
- header('Content-type:image/png');
- imagepng($this->__img);
- }
- imagegif($this->__img);
- }
- private function __setSpacePerChar(){
- #私有函数,设置字符间隔
- $this->__spacePerChar = $this->__canvasWidth / $this->__codeLength;
- return;
- }
- private function __getCode(){
- #获取验证码
- $this->__code = substr(md5(time().$this->__safe), rand(0, 24), $this->__codeLength);
- return $this->__code;
- }
- private function __drawText($colors, $code, $fontName){
- #开始绘图
- #设置GBFONTPATH为当前目录,不然linux环境下会报错
- putenv('GDFONTPATH=' . realpath('.'));
- for($i = 0; $i < strlen($code); $i++){
- $color = $colors[$i % count($colors)];
- imagettftext(
- $this->__img,
- 24 + rand(0, 8),
- -20 + rand(0, 40),
- ($i + 0.3) * $this->__spacePerChar,
- $this->__canvasHeight - 20 + rand(0, 20),
- $color,
- $fontName,
- $code{$i}
- );
- }
- #绘制随机实线
- for($i = 0; $i < 400; $i++){
- $x1 = rand(5, $this->__canvasWidth - 5);
- $y1 = rand(5, $this->__canvasHeight - 5);
- $x2 = $x1 - 4 + rand(0, 8);
- $y2 = $y1 - 4 + rand(0, 8);
- imageline($this->__img, $x1, $y1, $x2, $y2, $this->__colors[rand(0, count($this->__colors) - 1)]);
- }
- return;
- }//开源代码phpfensi.com
- private $__img = NULL;
- private $__canvasWidth = 120;
- private $__canvasHeight = 80;
- private $__codeLength = 8;
- private $__spacePerChar = 0;
- private $__code = 12345678;
- private $__safe = 2008;
- private $__background = NULL;
- private $__borderColor = NULL;
- private $__colors = array();
- private $__font = 'arial.ttf';
- private $__sessionName = '';
- }
- ?>
使用方法,代码如下:
- <?php
- #测试文件
- include_once('class.safeCode.php');
- session_start();
- $safeCode = new safeCode;
- $safeCode->setCanvas(200, 50);
- $safeCode->setCodeLength(8);
- $safeCode->setSafe('2008');#设置安全码,不设置有默认值,动态生成
- $safeCode->setBackground();
- $safeCode->setBorderColor();
- $safeCode->setFont('arial.ttf');#设置字体.必须同目录,字体文件
- $colors = array(array(128, 64, 192), array(192, 64, 128), array(108, 192, 64));//开源代码phpfensi.com
- $safeCode->setFontColor($colors);
- $safeCode->setSession();
- $safeCode->display('jpeg');
- ?>
原文链接:http://www.phpfensi.com/php/20140820/4506.html
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式