前言
在Web应用中,图形验证码(CAPTCHA)是防止自动化攻击的重要防线。推荐一个基于 .NET 的图形验证码模块,该模块不仅易于集成,还利用了 SkiaSharp 提供的强大性能优势。
项目介绍
项目最初发布的 v1 版本基于 ImageSharp,是一个纯托管的图像处理库,无需额外的本地依赖,非常适合快速部署到各种平台。
但是随着项目的发展和对更高性能的需求,推出了 v2 版本,该版本基于 SkiaSharp 开发。但发布到Linux时需要安装对应 NativeAssets(ImageSharp则不需要)。
项目特点
高性能:借助 SkiaSharp 的图像处理能力,验证码生成速度更快,资源消耗更低。
易集成:模块设计简洁,API 易于使用,能够快速集成到现有的 .NET 项目中。
跨平台支持:虽然在 Linux 环境下需要安装对应的 NativeAssets,但 SkiaSharp 依然提供了出色的跨平台兼容性。
项目使用
1、注册服务
builder.Services.AddCaptcha(builder.Configuration);
2、配置
appsettings.json (不提供配置时,使用默认配置)
{
"ConnectionStrings": {
"RedisCache": "localhost,password=Aa123456."
},
"CaptchaOptions": {
"CaptchaType": 5,
"CodeLength": 4,
"ExpirySeconds": 60,
"IgnoreCase": true,
"StoreageKeyPrefix": "",
"ImageOption": {
"Animation": false,
"FontSize": 32,
"Width": 100,
"Height": 40,
"BubbleMinRadius": 5,
"BubbleMaxRadius": 10,
"BubbleCount": 3,
"BubbleThickness": 1.0,
"InterferenceLineCount": 3,
"FontFamily": "kaiti",
"FrameDelay": 15,
"BackgroundColor": "#ffffff",
"ForegroundColors": "",
"Quality": 100,
"TextBold": false
}
}
}
配置可以通过运行Sample.Winfrom生成或直接下载Release运行。

代码配置
builder.Services.AddCaptcha(builder.Configuration, option =>
{
option.CaptchaType = CaptchaType.WORD;
option.CodeLength = 6;
option.ExpirySeconds = 30;
option.IgnoreCase = true;
option.StoreageKeyPrefix = "";
option.ImageOption.Animation = true;
option.ImageOption.FrameDelay = 30;
option.ImageOption.Width = 150;
option.ImageOption.Height = 50;
option.ImageOption.BackgroundColor = SkiaSharp.SKColors.White;
option.ImageOption.BubbleCount = 2;
option.ImageOption.BubbleMinRadius = 5;
option.ImageOption.BubbleMaxRadius = 15;
option.ImageOption.BubbleThickness = 1;
option.ImageOption.InterferenceLineCount = 2;
option.ImageOption.FontSize = 36;
option.ImageOption.FontFamily = DefaultFontFamilys.Instance.Actionj;
option.ImageOption.TextBold = true;
});
3、Controller
[Route("captcha")]
[ApiController]
public class CaptchaController : Controller
{
private readonly ICaptcha _captcha;
public CaptchaController(ICaptcha captcha)
{
_captcha = captcha;
}
[HttpGet]
public IActionResult Captcha(string id)
{
var info = _captcha.Generate(id);
var stream = new MemoryStream(info.Bytes);
return File(stream, "image/gif");
}
[HttpGet("validate")]
public bool Validate(string id, string code)
{
return _captcha.Validate(id, code);
}
[HttpGet("validate2")]
public bool Validate2(string id, string code)
{
return _captcha.Validate(id, code, false);
}
}
自定义随机验证码
动图和静态图随机出现, CaptchaType随机。
自定义字体
1、寻找字体
你可以通过fontspace找到自己喜爱的字体。
2、将字体放入项目,并设置为嵌入资源。
当然也可以不作为嵌入资源,放到特定目录也是可以的,只要对下边ResourceFontFamilysFinder稍作修改即可。

.NET Framework下使用
新建MVC项目.NET Framework 选择 4.6.2。
Nuget安装,先安装SkiaSharp, 再安装Lazy.Captcha.Core。
项目效果



项目地址
Gitee:gitee.com/pojianbing/…
总结
以上仅展示了LazyCaptcha v2图形验证码模块的部分功能。更多实用特性和详细信息,请大家访问项目地址。
转自https://juejin.cn/post/7488545861091278875
该文章在 2025/4/3 15:33:41 编辑过