php 利用GD库实现一个验证码功能(封装成了函数可自定义配置验证码外观及功能)

前言

在这里插入图片描述
使用 GD库来完成验证码功能非常简单,库中大量函数 API 堆在一起就成了这个功能,下面代码注释中详细介绍了每段代码的功能,非常适合新手。

完整代码

我把验证码功能 封装成了一个函数,因此可以 自定义配置,下面给出了完整代码及配置介绍。

下面这段代码可以直接粘贴到浏览器打开预览,查看效果。

<?php

/*
* //TODO: 验证码参数配置(GD库解决方案)
* @width(数值型): 组件宽度(默认值100)
* @height(数值型): 组件高度(默认值50)
* @length(数值型): 验证码多少位(默认值5)
* @type(数值型): 验证码的类型,分为纯数字(默认1)/纯字母(2)/数字字母混合(3)
*/

function verifyCode($width = 100, $height = 50, $length = 5, $type = 1){
    
# 1. 创建验证码画布(确立组件宽高)
$board = imagecreatetruecolor($width, $height);//画布大小

# 2. 创建随机调色板(深颜色用于验证码字/浅颜色用于背景)

// 浅色(140-255)
$shallow = imagecolorallocate($board, mt_rand(140,255), mt_rand(140,255), mt_rand(140,255));

// 深色(0-120)
$deep = imagecolorallocate($board, mt_rand(0,120), mt_rand(0,120), mt_rand(0,120));
imagefilledrectangle($board, 0, 0, $width, $height, $shallow);//画布背景上色

# 3. 确立验证码类型及创建模板(type)
switch($type){

    case 1 : $str = '0123456789';//数据模板([1]数字0-9)
        $code = substr(str_shuffle($str), 0, $length);//打乱顺序后截取
    break;

    case 2 : $arr = range('a', 'z');//数据模板([2]字母a-z)
        shuffle($arr);//打乱顺序
        $tmp = array_splice($arr, 0, 5);//临时模板
        $code = join('', $tmp);//把数组组合成字符串
    break;

    case 3 : $atr = '123456789abcdefghjkmnopqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ';
        //[3]混合0-9,a-z,A-Z(去掉了0 l o 这种难以识别的字母数字)
        $code = substr(str_shuffle($atr), 0, $length);
    break;

}

# 4. 将随机验证码写入到画布(循环写入)
for($i = 0; $i < $length; $i++){
    $x = floor($width / $length) * $i;//横轴偏移量
    $y = mt_rand(10, $height - 20);//竖轴偏移量(随机偏移)
    imagechar($board, 5, $x, $y, $code[$i], $deep);//写入画布
}

# 5. 画入圆弧干扰线(随机横纵坐标细线)
for($i = 0; $i < $length; $i++){
    imagearc($board,//画板
    mt_rand(10, $$width),//横轴位置
    mt_rand(10, $height),//竖轴位置
    mt_rand(10, $width),//圆弧宽度
    mt_rand(10, $height),//圆弧高度
    mt_rand(0, 10), mt_rand(0,270),$deep);//旋转角度及颜色
}

# 6. 画入干扰点(随机横纵坐标点状圆)
for($i = 0; $i < 50; $i++){
    imagesetpixel($board, mt_rand(0, $width), mt_rand(0, $height), $deep);
}

# 7. 指定输出类型并返回完整的验证码组件
ob_clean();//擦除缓冲区
header('Content-type: image/png');//输出类型
imagepng($board);//输出验证码
imagedestroy($board);//销毁内存(结束)

# 8. return 出去
return $code;

}

# 测试使用
verifyCode(100, 50, 5, 3);//宽为100,高为50,长度为5个字符,类型为混合型(数字+字母)

?>

上述代码,可以看到我配置的验证码属性为:

  • 验证码组件宽度:100px
  • 验证码组件高度:50px
  • 验证码字符长度:5位数
  • 验证码类型:混合型(数字+字母)

当然,数字类型 / 字母类型也都是自由选择,只需要调用验证码函数时改变传参值即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用PHPGD可以实现布料排版功能,以下是一个简单的示例代码: ```php <?php // 创建画布 $width = 800; // 画布宽度 $height = 600; // 画布高度 $image = imagecreatetruecolor($width, $height); // 设置背景色和边框 $bgColor = imagecolorallocate($image, 255, 255, 255); // 白色背景 $borderColor = imagecolorallocate($image, 0, 0, 0); // 黑色边框 imagefill($image, 0, 0, $bgColor); imagerectangle($image, 0, 0, $width - 1, $height - 1, $borderColor); // 布料尺寸和位置信息 $materialWidth = 400; // 布料宽度 $materialHeight = 300; // 布料高度 $materialX = 50; // 布料左上角X坐标 $materialY = 50; // 布料左上角Y坐标 // 绘制布料矩形 $materialColor = imagecolorallocate($image, 255, 0, 0); // 红色布料 imagefilledrectangle($image, $materialX, $materialY, $materialX + $materialWidth - 1, $materialY + $materialHeight - 1, $materialColor); // 零件尺寸和位置信息 $partWidth = 100; // 零件宽度 $partHeight = 80; // 零件高度 $partX = $materialX + 50; // 零件左上角X坐标 $partY = $materialY + 50; // 零件左上角Y坐标 // 绘制零件矩形 $partColor = imagecolorallocate($image, 0, 0, 255); // 蓝色零件 imagefilledrectangle($image, $partX, $partY, $partX + $partWidth - 1, $partY + $partHeight - 1, $partColor); // 输出图像 header('Content-type: image/png'); imagepng($image); // 销毁图像资源 imagedestroy($image); ?> ``` 以上示例代码创建一个800x600的画布,绘制了一个红色的布料矩形和一个蓝色的零件矩形。可以根据实际需求,调整布料和零件的尺寸、位置以及颜色。最后通过`header('Content-type: image/png')`和`imagepng($image)`将图像输出为PNG格式。 这只是一个简单的示例,实际应用中可能需要更复杂的算法来进行布料排版和优化。可以根据具体需求,结合GD提供的绘图函数,编写更复杂的代码来实现布料排版功能

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值