使用PHP生成带有干扰线的验证码,干扰点、字符倾斜详细类代码

互联网 19-8-21
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问题请访问PHP中文网:https://www.php.cn/

以上就是使用PHP生成带有干扰线的验证码,干扰点、字符倾斜详细类代码的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: 验证码
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:关于PHP安全编程的一些建议

相关资讯