您好,欢迎来到筏尚旅游网。
搜索
您的当前位置:首页简述php设计验证码的过程

简述php设计验证码的过程

来源:筏尚旅游网

简述php设计验证码的过程

php使用GD库生成验证码

一、绘图步骤:

1.创建画布,分配颜色,使用以下两个函数(可以在php手册GD库函数中找到):

imagecreatetruecolor()

imagecolorallocate()

2.绘画过程:

imagefill()

imagettftext()

imagesetpixel()

imageline()

3.输出图像:

header(“Content-Type:image/png”);

imagepng();

imagejpeg();

4.销毁图片(释放内存)

imagedestroy();

二、绘图具体步骤

生成验证码字符串

private function getCode(){
 $str="01234567abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
 $t='';
 for($i=0;$i<$this->m;$i++){
 $t.=$str[rand(0,$this->type['letter'])];
 }
 return $t;
 }

画出验证码

function drawCode(){
 $code=$this->getCode();//获取验证码字符串
 imagefill($this->im, 0, 0, $this->bg);
 for ($i=0; $i <200 ; $i++) { 
 imagesetpixel($this->im, rand(0,$this->width), rand(0,$this->height), rand(0,255));
 }
 imageline($this->im, rand(0,$this->width), rand(0,$this->height), rand(0,$this->width), rand(0,$this->height), rand(0,255));
 $c=imagecolorallocate($this->im, rand(0,200), rand(0,200), rand(0,200));
 for($i=0;$i<$this->m;$i++){
 imagettftext($this->im, 18, rand(-40,40), 8+(18*$i), 24, $c, "georgia.ttf",$code[$i] );
 }
 }

输出图像

function printImage(){
 $this->drawCode();
 header("Content-Type:image/jpeg");
 imagepng($this->im);
 $this->destroy();
 }
 function destroy(){
 imagedestroy($this->im);
 }

三、代码演示

<?php
/**
* 验证码画图类
*/
class Image 
{
 private $width;
 private $height;
 private $im;
 private $bg;
 private $m;
 private $type=array('num' => 9,'letter' => 61 );
 function __construct($width,$height,$m)
 {
 $this->width=$width;
 $this->height=$height;
 $this->m=$m;
 $this->im=imagecreatetruecolor($this->width, $this->height);
 $this->bg=imagecolorallocate($this->im, 220, 220, 220);
 }
 private function getCode(){
 $str="01234567abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
 $t='';
 for($i=0;$i<$this->m;$i++){
 $t.=$str[rand(0,$this->type['letter'])];
 }
 return $t;
 }
 function drawCode(){
 $code=$this->getCode();//获取验证码字符串
 imagefill($this->im, 0, 0, $this->bg);
 //加干扰点
 for ($i=0; $i <200 ; $i++) { 
 imagesetpixel($this->im, rand(0,$this->width), rand(0,$this->height), rand(0,255));
 }
 //加干扰线
 imageline($this->im, rand(0,$this->width), rand(0,$this->height), rand(0,$this->width), rand(0,$this->height), rand(0,255));
 $c=imagecolorallocate($this->im, rand(0,200), rand(0,200), rand(0,200));
 for($i=0;$i<$this->m;$i++){
 imagettftext($this->im, 18, rand(-40,40), 8+(18*$i), 24, $c, "georgia.ttf",$code[$i] );
 }
 }
 function printImage(){
 $this->drawCode();
 header("Content-Type:image/jpeg");
 imagepng($this->im);
 $this->destroy();
 }
 function destroy(){
 imagedestroy($this->im);
 }
}
function unit_test(){
 $obj=new Image(20*4,30,4);
 $obj->printImage();
}
unit_test();
?>

更多PHP相关知识,请访问PHP中文网!

Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务