GD2简易字母数字验证码

gd库是学习php比较早接触到的部分,因为学过一些canvas,所以感觉上手快,容易出效果,感觉验证码又有点小神秘,从最基础的做开始,熟悉一些函数,函数名真的长,但是很多都是见而知其意,后面还会封装成类和函数,包括完整的验证

GD2使用步骤

  • 创建画布
  • 创建颜色
  • 开始绘制
  • 格式输出
  • 销毁资源

imagefontwidth()

<?php
$width = 300;
$height = 100;
$image =imagecreatetruecolor($width,$height); //创建画布,默认返回黑色背景

$white = imagecolorallocate($image,255,255,255);//画布背景色

imagefilledrectangle($image,0,0,$width,$height,$white); //填充画布背景色


for($i=0;$i<4;$i++){
    $fontsize = mt_rand(30,40);
    $fontcolor=imagecolorallocate($image,rand(0, 120),rand(0, 120),rand(0, 120));
    //验证码颜色,放在循环里,每个字符颜色不同
    $data = "abcdefghijklmnpqrstuvwyz123456789";
    $fontcontent = substr($data,rand(0, strlen($data)-1), 1);
$x=($i*300/4)+rand(30, 50);

    $y=rand(40, 70);

    $angle = mt_rand(-15,15);

    imagettftext($image,$fontsize,$angle,$x,$y,$fontcolor,'msyh.ttc',$fontcontent);
}
header("content-type:image/jpeg;charset=utf-8");

ob_clean(); //这个就很怪,有时候不加就报错

imagejpeg($image);

imagedestroy($image);
?>
verify_code.php.jpg

关键点在于随机出现四个摆放不同的字符,还有另一种简易方式

$string = join("",array_merge(range('a','z'),range('A','Z'),range(0,9)));
$text = str_shuffle($string)[0];

str_shuffle( )用于随机打乱字符串,返回字符串,截取第一个字符

加上点和线的干扰元素

for ($i = 0;$i < 50;$i++){
    imagesetpixel($image,mt_rand(0,$width),mt_rand(0,$height),randcolor($image));
}

for ($i = 0;$i < 3;$i++){
    imageline($image,mt_rand(0,$width),mt_rand(0,$height),mt_rand(0,$width),mt_rand(0,$height),randcolor($image));
}

里面的randcolor($image)是封装的函数

function randcolor($image){
    return imagecolorallocate($image,mt_rand(30,120),mt_rand(30,120),mt_rand(30,120));
};
gd2_demo4.php.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容