今天小编就为大家带来一篇PHP实现带有干扰线的验证码,干扰点、字符倾斜的文章。小编觉得挺不错的,为此分享给大家做个参考。一起跟随小编过来看看吧。
PHP生成验证码的类代码,本验证码类支持生成干扰点、干扰线等干扰像素,还可以使字符倾斜。在类中你可以定义验证码宽度、高度、长度、倾斜角度等参数,后附有详细用法:
<?php
class class_authcode{
public $authcode = ''; //验证码
private $width = ''; //验证码图片宽
private $height = ''; //验证码图片高
private $len = ''; //验证码长度
private $tilt = array(-30,30);//验证码倾斜角度
private $font = 'AlteHaasGroteskBold.ttf';//字体文件
private $str = ''; //验证码基
private $im = ''; //生成图片的句柄
//构造函数
function __construct($width=100,$heigh=30,$len=4) {
$this->width = $width;
$this->height = $heigh;
$this->len = $len;
$this->str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
$str_len = strlen($this->str)-1;
for ($i=0; $i<$len; $i++) {
$this->authcode .= $this->str[rand(0,$str_len)];
}
}
//生成验证码图片
private function imagecreate(){
$this->im = imagecreatetruecolor($this->width,$this->height);
}
//干扰颜色
private function ext_color() {
return imagecolorallocate($this->im,rand(50, 180),rand(50, 180),rand(50, 180));
}
//生成干扰点
private function ext_point() {
for ($i=0; $i<$this->width*2; $i++) {
imagesetpixel($this->im,rand(1,$this->width-1),rand(1,$this->height-1),$this->ext_color());
}
}
//生成干扰线
private function ext_line() {
for ($i=0; $i<$this->len; $i++) {
$x1 = rand(1,$this->width-1);
$y1 = rand(1,$this->height-1);
$x2 = rand(1,$this->width-1);
$y2 = rand(1,$this->height-1);
imageline($this->im,$x1,$y1,$x2,$y2,$this->ext_color());
}
}
//把验证码写入图片(不能和$this->imgstrfloat()同时使用)
private function imgstr() {
$old_x = 1;
for ($i=0; $i<$this->len; $i++) {
$fontsize = rand(2,5); //字体大小
$tmp_1 = $fontsize*2.5;
$tmp_2 = $i>0 $tmp_1 : 0;
$y = rand(1,$this->height/2);
$x = rand($old_x+$tmp_2, ($i+1)*($this->width)/$this->len-$tmp_1);
$old_x = $x;
$color = imagecolorallocate($this->im,rand(200, 255),rand(200, 255),rand(200, 255));
imagestring($this->im,$fontsize,$x,$y,$this->authcode[$i],$color);
}
}
//把验证码倾斜写入图片(注意这里不能和$this->imgstr()方法同时使用)
private function imgstrfloat() {
$old_x = 1;
for ($i=0; $i<$this->len; $i++) {
$fontfloat = rand($this->tilt[0],$this->tilt[1]);
$fontsize = rand(10,15); //字体大小
$tmp_1 = $i>0 $fontsize : 0;
$y = rand($fontsize+2, $this->height-2);
$x = rand($old_x+$tmp_1+2, ($i+1)*($this->width)/$this->len-$fontsize-2);
$old_x = $x;
$color = imagecolorallocate($this->im, rand(200, 255), rand(200, 255), rand(200, 255));
imagettftext($this->im, $fontsize, $fontfloat, $x, $y, $color, $this->font, $this->authcode[$i]);
}
}
//输出验证码图片
function output() {
$this->imagecreate();
$this->imgstr();
//$this->imgstrfloat();
$this->ext_point();
$this->ext_line();
header('content-type:image/png');
imagepng($this->im);
imagedestroy($this->im);
}
}
?>
本验证码用法说明:
$obj = new class_authcode();//实例化对象,并设置验证码图片的宽、高和验证码的长度
$obj->$authcode; //获取验证码
$obj->output(); //输出验证码图片
以上就是PHP实现带有干扰线的验证码,干扰点、字符倾斜的简略介绍,详细使用情况还需要大家自己使用过才领会。如果想了解更多,欢迎关注亿速云行业资讯频道!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。