文章来源:http://www.cnblogs.com/hello-tl/p/7592998.html

<?php
/**
* __construct($new);构造函数创建一张图片$new->width['宽']->height['高']->r[r]->b[b]->g[g]
* 添加数字 digital($digital); $digital->length['位数'] -> size['数字大小']
* 添加字符串 font($font,$data) $font->length['位数'] -> size['数字大小'] $data需要的字符串不能是中文
* 给验证码添加干扰元素 点 point($lenth) $lenth 多少个
* 添加干扰元素 线 line($lenth) $lenth 多少个
* function __destruct() 析构函数保存 session 打印图片 销毁图片
*/
class TL_Captcha{
private $image; //验证码图片
private $width; //验证码宽度
private $height; //验证码高度
private $captch_code; //验证码信息
/**
* [__construct description] 构造函数创建一张图片
* @param [type] $new [description] 图片大小 以及背景颜色 数组形式
*/
public function __construct($new){
session_start();
$this->width = $new['width'];
$this->height = $new['height'];
//创建一张 宽$new['width'],高$new['height']的图片 [默认黑色]
$this->image = imagecreatetruecolor($this->width, $this->height);
//设置图片的底图 颜色为 r$new['r'],b$new['b'],g$new['g']
$bgcolor = imagecolorallocate($this->image, $new['r'], $new['b'], $new['g']);
//修改图片的底色
imagefill($this->image,0,0,$bgcolor);
}
/**
* 添加数字
* @param [type] $digital [description] $digital数字配置 $digital['length'] 数字长度 $digital['size'] 数字大小
* @return [type] [description]
*/
public function digital($digital){
for($i=0;$i<$digital['length'];$i++){
//设置数字字体大小
$fontsize = $digital['size'];
//设置数字颜色
$fontcolor = imagecolorallocate($this->image, rand(0,120), rand(0,120), rand(0,120));
//设置数字的值
$fontcontent = rand(0,9);
//作用 保存 session
$this->captch_code = $this->captch_code.$fontcontent;
//设置放入图片的x轴
$x = ($i*$this->width/$digital['length']) + rand(5,10);
//设置放入图片的y轴
$y = rand(5,10);
//把数字放入图片
imagestring($this->image, $fontsize, $x, $y, $fontcontent, $fontcolor);
}
}
/**
* 添加字符串
* @param [type] $strings [description] $font数字配置 $strings['length'] 数字长度 $strings['size'] 数字大小
* @param [type] $data [description] 字符串 不能有文字
* @return [type] [description]
*/
public function strings($strings,$data){
for($i=0;$i<$strings['length'];$i++){
//设置数字字体大小
$fontsize = $strings['size'];
//设置数字颜色
$fontcolor = imagecolorallocate($this->image, rand(0,120), rand(0,120), rand(0,120));
//截取字符串设置默认字符
$fontcontent = substr($data, rand(0,strlen($data)),1);
//作用 保存 session
$this->captch_code = $this->captch_code.$fontcontent;
//设置放入图片的x轴
$x = ($i*$this->width/$strings['length']) + rand(5,10);
//设置放入图片的y轴
$y = rand(5,10);
//把文字放入图片
imagestring($this->image, $fontsize, $x, $y, $fontcontent, $fontcolor);
}
return $this->captch_code;
}
/**
* 中文验证码
* @param [type] $fontface [description] 文字路径
* @param [type] $strdb [description] 随机的中文字符串
* @param [type] $length [description] 验证码长度
* @param [type] $size [description] 字体大小
* @return [type] [description]
*/
public function text($fontface,$strdb,$length,$size){
//转换数组
$strdbs = str_split($strdb,3);
for($i=0;$i<$length;$i++){
//设置文字颜色
$fontcolor = imagecolorallocate($this->image, rand(0,120), rand(0,120), rand(0,120));
//获取随机数组中的数字
$cn = $strdbs[rand(0,count($strdbs)-1)];
//写入session
$this->captch_code = $this->captch_code.$cn;
$x = (($i*$this->width/$length))+rand(5,10);
$y = rand(30,35);
imagettftext($this->image, $size, mt_rand(-60,60), $x, $y, $fontcolor, $fontface, $cn);
}
}
/**
* 给验证码添加干扰元素 点
* @param [type] $lenth [description] 添加点的数量
* @return [type] [description]
*/
public function point($lenth){
for($i=0;$i<$lenth;$i++){
//设置点的颜色
$pointcolor = imagecolorallocate($this->image, rand(50,200), rand(50,200), rand(50,200));
//放入验证码
imagesetpixel($this->image, rand(1,$this->width), rand(1,$this->height), $pointcolor);
}
}
/**
* 添加干扰元素 线
* @param [type] $lenth [description] 添加点的数量
* @return [type] [description]
*/
public function line($lenth){
for($i=0;$i<$lenth;$i++){
//设置线的颜色
$linecolor = imagecolorallocate($this->image, rand(80,220), rand(80,220), rand(80,220));
//放入验证码
imageline($this->image,rand(1,$this->width),rand(1,$this->height),rand(1,$this->width),rand(1,$this->height),$linecolor);
}
}
/**
* 构造函数打印图片并且销毁
*/
public function __destruct() {
header('content-type:image/png');
//创建SESSION
$_SESSION['authcode'] = $this->captch_code;
//打印图片
imagepng($this->image);
//销毁图片
imagedestroy($this->image);
}
}
$new = array(
'width' => 200,
'height' => 50,
'r' => 255,
'b' => 255,
'g' => 255
);
$Captcha = new Captcha($new);
//随机数字
// $digital = array(
// 'length' => 5,
// 'size' => 6,
// );
// $Captcha->digital($digital);
//
//随机字符串 不能有中文
// $strings = array(
// 'length' => 5,
// 'size' => 6,
// );
// $data = "qweqwewqewqeewqe1545616545446";
// $Captcha->strings($strings,$data);
//随机文字验证吗
//字体文件
// $fontface = "STXINGKA.TTF";
// $strdb = '晨起微风吹拂迎着第一缕朝阳绽放的方向踩着清凉的露珠沐着微醉的晨风静静漫行在清爽舒适的田野上欣喜盈怀云很轻风很静万物生灵大多还沉浸在黎明前的宁静里酣睡只有几只晨起的粉蝶在花中轻舞寂静的清晨给人一种恬淡安然温润祥和的柔美韵致令人陶醉其中流恋忘返沿着那条潺潺流动的小溪蜿蜒而下聆听溪水欢快地吟唱心变得无比的愉悦慢行几步稍加留意就能看到小鱼们在浅水里欢乐地舞蹈顽皮的小虾们在溪边的水草丛里追逐嬉戏若是你够幸运的话兴许还能撞上小乌龟在堤脚下的缝隙间探出半个头来欣喜地打量着这个神奇的世界呢然而这静好的一切随着一群大白鹅和一群小花鸭的介入而结束在鹅与鸭的叫声响起的一刹那小鱼小虾们早已屏声静气地藏匿好了身影那胆小怕事的小乌龟更是吓得立马缩回那才稍稍探出小半截的头颅瞬间整条小溪便盈满了鹅与鸭的嘹亮歌声';
// $length = "5";
// $Captcha->text($fontface,$strdb,$length,"14");
//加干扰元素 点
// $Captcha->point('200');
//加干扰元素线
// $Captcha->line('5');

文章来源:http://www.cnblogs.com/hello-tl/p/7592998.html

PHP:GD库 生成验证码图片的更多相关文章

  1. 利用php的GD库生成验证码

    <?php ,); //创建一个100宽30高的底图,默认黑色 ,,); //修改颜色.数字对应 rgb 的三个数值.白色 imagefill(,,$bgcolor); //从左上角到右下角把颜 ...

  2. PHP5 GD库生成图形验证码(汉字)

    PHP5 GD库生成图形验证码且带有汉字的实例分享. 1,利用GD库函数生成图片,并在图片上写指定字符imagecreatetruecolor 新建一个真彩色图像imagecolorallocate ...

  3. java web学习总结(九) -------------------通过Servlet生成验证码图片

    一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下:

  4. JavaWeb---总结(九)通过Servlet生成验证码图片

    一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawImage Servlet,用来生成验证码图片  1 package gacl. ...

  5. Java 生成验证码图片

    生成验证码图片并对提交的输入进行验证 // HttpServletResponse常见应用——生成验证码 // 利用BufferedImage类生产随机图片 public static final i ...

  6. javaweb学习总结(九)—— 通过Servlet生成验证码图片

    一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下:

  7. 012. asp.net生成验证码图片(汉字示例/字母+数字)

    protected void Page_Load(object sender, EventArgs e) { //生成验证码图片的基本步骤 string checkCode = "新年快乐& ...

  8. J2EE如何生成验证码图片和点击刷新验证码

    验证码图片生成步骤 创建BufferedImage对象. 获取BufferedImage的画笔,即调用getGraphics()方法获取Graphics对象. 调用Graphics对象的setColo ...

  9. java web 学习九(通过servlet生成验证码图片)

    一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下:

随机推荐

  1. bzoj 2986: Non-Squarefree Numbers【容斥+莫比乌斯函数】

    看到\( 10^10 \)的范围首先想到二分,然后把问题转化为判断\( [1,n] \)内有多少个是某个质数的平方和的数. 所以应该是加上是一个质数的平方的个数减去是两个质数的平方的个数加上是三个质数 ...

  2. Qt事件系统之五:事件过滤器和事件的发送

    Qt提供了事件过滤器来实现在一个部件中监控其他多个部件的事件.事件过滤器与其他部件不同,它不是一个类,只是由两个函数组成的一种操作,用来完成一个部件对其他部件的事件的监视.这两个函数分别是 insta ...

  3. [COCI2010]HRPA

    Description N个石子,A和B轮流取,A先.每个人每次最少取一个,最多不超过上一个人的个数的2倍. 取到最后一个石子的人胜出,如果A要有必胜策略,第一次他至少要取多少个. Input 第一行 ...

  4. codeforces 555B Case of Fugitive

    题目连接: http://codeforces.com/problemset/problem/555/B 题目大意: 有n个岛屿(岛屿在一列上,可以看做是线性的,用来描述岛屿位置的是起点与终点),m个 ...

  5. Eight POJ - 1077 HDU - 1043 八数码

    Eight POJ - 1077 HDU - 1043 八数码问题.用hash(康托展开)判重 bfs(TLE) #include<cstdio> #include<iostream ...

  6. Android系统的启动流程

    手机启动后首先会通过执行BootLoader来启动Linux内核,BootLoader是所有嵌入式设备开机启动执行的第一行代码,linux内核在启动过程中会加载各种设备的驱动同时初始化数据结构,并且开 ...

  7. Jmeter+Jenkins+Ant自动化集成环境搭建

    搭建环境: JDK:jdk1.8.0_92 Ant:apache-ant-1.9.7 Jmeter: apache-jmeter-3.0 Jenkins:jenkins-2.19.3 具体环境配置 1 ...

  8. 从源码对比DefaultServeMux 与 gorilla/mux

    从源码对比DefaultServeMux 与 gorilla/mux DefaultServeMux Golang自带的net/http库中包含了DefaultServeMux方法,以此可以搭建一个稳 ...

  9. (1)《Head First HTML与CSS》学习笔记---HTML基本概念

    前言: 1.     这本书并没有面面俱到,涵盖所有内容,只提供作为初学者真正需要的东西:基本知识和信心.所以这不是唯一的参考书.(我买了一本<HTML5权威指南>作为参考书和这本一起看, ...

  10. oracle 创建表

    --创建表 create table browser_track( btId number not null , opend_id ) not null, url_address ) not null ...