写了个验证码类,中文的需要载入字体,这里就不放上面了。
这个类比较简单,封装度并不是太高,不过够用了,能做10以内的加减乘法
代码如下:
<?php
/*
* 验证码类
* @param $len 几位数的验证码
* @param $w 画布的大小(验证码图片的宽度)
* @param $h 验证码图片的高度
* @param $font-size 写入到画布上的字体的大小,选值为1-5,默认是5,最大字体
* @param $pixlen 干扰像素的个数
* @param $linelen 干扰线个数
*
*/
class Captcha{
protected $len;
protected $w;
protected $h;
protected $fontsize;
protected $pixlen;
protected $linelen;
public function __construct($len='2',$w='145',$h='25',$fontsize='5',$pixlen='200',$linelen='50') {
$this->len = $len;
$this->w = $w;
$this->h = $h;
$this->fontsize = $fontsize;
$this->pixlen = $pixlen;
$this->linelen = $linelen;
}
public function checkcode(){
//载入一个新的字体
//imageloadfont('ygymbxsjt.ttf');
//定义两个随机的数字
//随机两个数中间的符号
$arr = array('+','-','*');
$opt = $arr[array_rand($arr)];
$a = rand(1,9);
$b = rand(1,9);
switch ($opt){
case '+':
$verify = "$a + $b =";
$_SESSION['verify'] = $a + $b;
break;
case '-':
$verify = "$a - $b =";
$_SESSION['verify'] = $a - $b;
break;
case '*':
$verify = "$a * $b =";
$_SESSION['verify'] = $a * $b;
break;
}
//下面就是创建画布、使用画布的过程了
//创建画布
$img = imagecreatetruecolor($this->w,$this->h);
//操作画布
//定义使用到的颜色
//背景色
$bgcolor = imagecolorallocate($img, 50, 50, 50);
//干扰像素颜色
$pixcolor = imagecolorallocate($img,rand(0,255),rand(0,255),rand(0,255));
//干扰线颜色
$linecolor = imagecolorallocate($img,rand(0,255),rand(0,255),rand(0,255));
//字体颜色
$fontcolor = imagecolorallocate($img,255,255,255);
//填充画布
//将整个画布都填充为$bgcolor色
imagefill($img,0,0,$bgcolor);
//画干扰像素
for($i=0; $i< $this->pixlen; $i++){
imagesetpixel($img,rand(0,$this->w),rand(0,$this->h),$pixcolor);
}
//画干扰线
for($i=0; $i< $this->linelen; $i++){
imageline($img, rand(0,$this->w), rand(0,$this->h), rand(0,$this->w), rand(0,$this->h), $linecolor);
}
//设置字体居中显示
//字体的宽和高
$fwidth = imagefontwidth($this->fontsize) * 4;
$fheight = imagefontheight($this->fontsize);
//计算写入到画布上的x和y值
$x = ($this->w - $fwidth)/2;
$y = ($this->h - $fheight)/2;
//将字体写到画布上
imagestring($img,$this->fontsize,$x,$y,$verify,$fontcolor);
//输出画布
header("content-type:text/html;charset=utf-8");
header("content-type:image/png");
imagepng($img);
//销毁画布
imagedestroy($img);
}
}