前言
在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 編輯過