php 验证码图片程序
发布:smiling 来源: PHP粉丝网 添加日期:2014-08-20 09:50:23 浏览: 评论:0
- <?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');
- ?>
Tags: php验证码图片 php验证码程序
- 上一篇:php给图片加水印函数
- 下一篇:php 生成验证码程序
相关文章
- ·php 生成验证码程序(2014-08-20)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)