PHP(11) 图像型的验证码

PHP(11) 图像型的验证码
 
在用户登陆程序(版本1)中,咱们曾经提到过验证码主要分为字符型和图像型两种,而字符型又能够分为数字型和混合型两种(这些分类是个人分类,能够存在误差,请多包涵!^_^)。在上两篇博文中,咱们已经将字符型的验证码实现了,此次,咱们再次咱们的程序作一次升级----图像型验证码
 
 
若是咱们在PHP中来处理图像的话,那么就必须依赖于GD(Graphics Draw)库,还记得咱们在php.ini中启用过php_gd2.dll吗,启用该文件的目的就是为了来处理图像的!
 
下面咱们就来了解一下GD函数库吧!
 
1. p_w_picpath_create和p_w_picpathcreatetruecolor
 
两个函数的目的是同样的,都是建立一个图像资源,语法结构也
同样的
 
$变量名称 = p_w_picpathcreate(宽度,高度);
 
 
$变量名称 = p_w_picpathcreatetruecolor(宽度,高度);
 
二者惟一的区别在于:前者是基于调色板;后者基于真彩色(推荐使用)
 
2. p_w_picpathcolorallocate
 
功能:为图像来分配一个颜色,也就是说这种颜色可能在图像中使用,但具体的是在前景色中使用;仍是在背景色或填充色中使用,并不固定,由用户来决定。
 
$变量名称 = p_w_picpathcolorallocate($图像资源名称,红色,绿色,蓝色);
 
3. p_w_picpathfill
 
功能:区域填充
 
语法:[$变量名称=]p_w_picpathfill($图像资源名称,x,y,颜色);
 
须要提醒各位的是:颜色不能够直接来书写,必须使用imagecolorallocate来分配
 
4. p_w_picpathstring和p_w_picpathttftext
 
功能均为在图像中书写文本,不过p_w_picpathstring通常用来使用内置字体来书写文本,并且文本不能带有旋转样式,若是想经过p_w_picpathstring+外部字体来书写文本时,那么必须使用p_w_picpathloadfont来加载字体;而p_w_picpathttftext则使用TrueType 字体在图像内书写文本。
 
[$变量名称=]p_w_picpathstring($图像资源名称,字号,x,y,”内容”,颜色);
 
[$变量名称=]p_w_picpathttftext($图像资源名称,字号,旋转角度,x,y,颜色,”字体文件”,”内容”);
 
5.  p_w_picpathfilledrectangle、p_w_picpatharc、p_w_picpathline、p_w_picpathsetpixel
 
p_w_picpathfillledrectangle的功能为绘制填充的矩形
 
p_w_picpatharc的功能为在图布上绘制圆弧
 
p_w_picpathline的功能为在画布上绘制线段
 
p_w_picpathsetpixel的功能为在画布上绘制像素点
 
6. p_w_picpathgif、p_w_picpathjpeg、p_w_picpathpng
 
p_w_picpathgif的功能为将图像资源做为gif格式输出到屏幕或生成文件
 
p_w_picpathjpeg的功能为将图像资源做为jpeg格式输出到屏幕或生成文件
 
p_w_picpathpng的功能为将图像资源做为png格式输出到屏幕或生成文件
 
7.     p_w_picpathdestroy
 
p_w_picpathdestroy的功能为销毁图像资源
 
好了,如今的这几个函数,咱们差很少就都理解了,咱们如今来实现一个简单的案例:
 
案例1:
 
$width   = "120";
 
$height   = "45";
 
$img = p_w_picpathcreatetruecolor($width,$height);
 
$black = p_w_picpathcolorallocate($img,0,0,0);
 
$white = p_w_picpathcolorallocate($img,255,255,255);
 
p_w_picpathfill( $img , 0 , 0 , $black );
 
p_w_picpathfilledrectangle( $img , 1 , 1 , $width - 2 , $height - 2 , $white );
 
$char = rand(1000,9999);
 
p_w_picpathstring( $img , 5 , 40 , 15 , $char , $black );
 
p_w_picpathjpeg( $img );
 
运行效果以下:
 
 
 
 
案例2:
 
$width   = "120";
 
$height   = "45";
 
$img = p_w_picpathcreatetruecolor($width,$height);
 
$black = p_w_picpathcolorallocate($img,0,0,0);
 
$white = p_w_picpathcolorallocate($img,255,255,255);
 
p_w_picpathfill( $img , 0 , 0 , $black );
 
p_w_picpathfilledrectangle( $img , 1 , 1 , $width - 2 , $height - 2 , $white );
 
for ( $i = 0 ; $i < 4 ; $i ++)
 
{
 
    $x = 40 + $i * 15;
 
    $char = rand(0,9);
 
    $color = p_w_picpathcolorallocate($img,rand(0,255),rand(50,100),rand(50,120)); 
 
    p_w_picpathstring($img,5,$x,15,$char,$color);
 
}
 
p_w_picpathjpeg( $img );
 
运行效果以下:
 
 
案例3:
 
$width   = "120";
 
$height   = "45";
 
$img = p_w_picpathcreatetruecolor($width,$height);
 
$black = p_w_picpathcolorallocate($img,0,0,0);
 
$white = p_w_picpathcolorallocate($img,255,255,255);
 
p_w_picpathfill( $img , 0 , 0 , $black );
 
p_w_picpathfilledrectangle( $img , 1 , 1 , $width - 2 , $height - 2 , $white );
 
for ( $i = 0 ; $i < 4 ; $i ++)
 
{
 
    $x = 40 + $i * 15;
 
    $char = rand(0,9);
 
    $fontSize = rand(15,20);
 
    $angle = rand(-20,20);
 
    $y = rand(25,35);
 
    $color = p_w_picpathcolorallocate($img,rand(0,255),rand(50,100),rand(50,120)); 
 
    p_w_picpathttftext($img,$fontSize,$angle,$x,$y,$color,"PilsenPlakat.ttf",$char);
 
}
 
p_w_picpathjpeg( $img );
 
运行效果以下:
 
 
 
案例4:在案例3的基础上添加一些杂点
 
$width   = "120";
 
$height   = "45";
 
$img = p_w_picpathcreatetruecolor($width,$height);
 
$black = p_w_picpathcolorallocate($img,0,0,0);
 
$white = p_w_picpathcolorallocate($img,255,255,255);
 
p_w_picpathfill( $img , 0 , 0 , $black );
 
p_w_picpathfilledrectangle( $img , 1 , 1 , $width - 2 , $height - 2 , $white );
 
for ( $i = 0 ; $i < 5 ; $i ++)
 
{
 
    p_w_picpathline($img,rand(0,$width),rand(0,$height),rand(0,$width),rand(0,$height),$black);
 
}
 
for ( $i = 0 ; $i < 50 ; $i ++)
 
{
 
    p_w_picpathsetpixel($img,rand(0,$width),rand(0,$height),$black);
 
}
 
for ( $i = 0 ; $i < 4 ; $i ++)
 
{
 
    $x = 40 + $i * 15;
 
    $char = rand(0,9);
 
    $fontSize = rand(15,20);
 
    $angle = rand(-20,20);
 
    $y = rand(25,35);
 
    $color = p_w_picpathcolorallocate($img,rand(0,255),rand(50,100),rand(50,120)); 
 
    p_w_picpathttftext($img,$fontSize,$angle,$x,$y,$color,"PilsenPlakat.ttf",$char);
 
}
 
p_w_picpathjpeg( $img );
 
 
运行效果以下:
 

好了,先写这些,剩余的明天再补,由于时间太晚了,明天还有课!哈哈!很差意思!各位晚安!!
相关文章
相关标签/搜索