国产高清在线免费观看-国产高清在线免费无码-国产高清在线男人的天堂-国产高清在线视频-国产高清在线视频精品视频-国产高清在线视频伊甸园

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

.NET 驗(yàn)證碼生成神器基于 SkiaSharp 的高性能方案

freeflydom
2025年4月3日 15:30 本文熱度 661

前言

在Web應(yīng)用中,圖形驗(yàn)證碼(CAPTCHA)是防止自動(dòng)化攻擊的重要防線。推薦一個(gè)基于 .NET 的圖形驗(yàn)證碼模塊,該模塊不僅易于集成,還利用了 SkiaSharp 提供的強(qiáng)大性能優(yōu)勢。

項(xiàng)目介紹

項(xiàng)目最初發(fā)布的 v1 版本基于 ImageSharp,是一個(gè)純托管的圖像處理庫,無需額外的本地依賴,非常適合快速部署到各種平臺(tái)。

但是隨著項(xiàng)目的發(fā)展和對更高性能的需求,推出了 v2 版本,該版本基于 SkiaSharp 開發(fā)。但發(fā)布到Linux時(shí)需要安裝對應(yīng) NativeAssets(ImageSharp則不需要)。

項(xiàng)目特點(diǎn)

高性能:借助 SkiaSharp 的圖像處理能力,驗(yàn)證碼生成速度更快,資源消耗更低。

易集成:模塊設(shè)計(jì)簡潔,API 易于使用,能夠快速集成到現(xiàn)有的 .NET 項(xiàng)目中。

跨平臺(tái)支持:雖然在 Linux 環(huán)境下需要安裝對應(yīng)的 NativeAssets,但 SkiaSharp 依然提供了出色的跨平臺(tái)兼容性。

項(xiàng)目使用

1、注冊服務(wù)

// 默認(rèn)使用內(nèi)存存儲(chǔ)(AddDistributedMemoryCache)
builder.Services.AddCaptcha(builder.Configuration);
// 如果使用redis分布式緩存
//builder.Services.AddStackExchangeRedisCache(options =>
//{
//    options.Configuration = builder.Configuration.GetConnectionString("RedisCache");
//    options.InstanceName = "captcha:";
//});

2、配置

appsettings.json (不提供配置時(shí),使用默認(rèn)配置)

{
  "ConnectionStrings": {
    // 使用Redis緩存時(shí),需要配置此項(xiàng)
    // 使用格式參考 Microsoft.Extensions.Caching.StackExchangeRedis
    "RedisCache": "localhost,password=Aa123456."
  },
  "CaptchaOptions": {
    "CaptchaType": 5, // 驗(yàn)證碼類型
    "CodeLength": 4, // 驗(yàn)證碼長度, 要放在CaptchaType設(shè)置后  當(dāng)類型為算術(shù)表達(dá)式時(shí),長度代表操作的個(gè)數(shù), 例如2
    "ExpirySeconds": 60, // 驗(yàn)證碼過期秒數(shù)
    "IgnoreCase": true, // 比較時(shí)是否忽略大小寫
    "StoreageKeyPrefix": "", // 存儲(chǔ)鍵前綴
    "ImageOption": {
      "Animation": false, // 是否啟用動(dòng)畫
      "FontSize": 32, // 字體大小
      "Width": 100, // 驗(yàn)證碼寬度
      "Height": 40, // 驗(yàn)證碼高度
      "BubbleMinRadius": 5, // 氣泡最小半徑
      "BubbleMaxRadius": 10, // 氣泡最大半徑
      "BubbleCount": 3, // 氣泡數(shù)量
      "BubbleThickness": 1.0, // 氣泡邊沿厚度
      "InterferenceLineCount": 3, // 干擾線數(shù)量
      "FontFamily": "kaiti", // 包含actionj,epilog,fresnel,headache,lexo,prefix,progbot,ransom,robot,scandal,kaiti
      "FrameDelay": 15, // 每幀延遲,Animation=true時(shí)有效, 默認(rèn)30
      "BackgroundColor": "#ffffff", //  格式: rgb, rgba, rrggbb, or rrggbbaa format to match web syntax, 默認(rèn)#fff
      "ForegroundColors": "", //  顏色格式同BackgroundColor,多個(gè)顏色逗號分割,隨機(jī)選取。不填,空值,則使用默認(rèn)顏色集
      "Quality": 100, // 圖片質(zhì)量(質(zhì)量越高圖片越大,gif調(diào)整無效可能會(huì)更大)
      "TextBold": false // 粗體,該配置2.0.3新增
    }
  }
}

配置可以通過運(yùn)行Sample.Winfrom生成或直接下載Release運(yùn)行。

代碼配置

// 全部配置
builder.Services.AddCaptcha(builder.Configuration, option =>
{
    option.CaptchaType = CaptchaType.WORD; // 驗(yàn)證碼類型
    option.CodeLength = 6; // 驗(yàn)證碼長度, 要放在CaptchaType設(shè)置后.  當(dāng)類型為算術(shù)表達(dá)式時(shí),長度代表操作的個(gè)數(shù)
    option.ExpirySeconds = 30; // 驗(yàn)證碼過期時(shí)間
    option.IgnoreCase = true; // 比較時(shí)是否忽略大小寫
    option.StoreageKeyPrefix = ""; // 存儲(chǔ)鍵前綴
    option.ImageOption.Animation = true; // 是否啟用動(dòng)畫
    option.ImageOption.FrameDelay = 30; // 每幀延遲,Animation=true時(shí)有效, 默認(rèn)30
    option.ImageOption.Width = 150; // 驗(yàn)證碼寬度
    option.ImageOption.Height = 50; // 驗(yàn)證碼高度
    option.ImageOption.BackgroundColor = SkiaSharp.SKColors.White; // 驗(yàn)證碼背景色
    option.ImageOption.BubbleCount = 2; // 氣泡數(shù)量
    option.ImageOption.BubbleMinRadius = 5; // 氣泡最小半徑
    option.ImageOption.BubbleMaxRadius = 15; // 氣泡最大半徑
    option.ImageOption.BubbleThickness = 1; // 氣泡邊沿厚度
    option.ImageOption.InterferenceLineCount = 2; // 干擾線數(shù)量
    option.ImageOption.FontSize = 36; // 字體大小
    option.ImageOption.FontFamily = DefaultFontFamilys.Instance.Actionj; // 字體
    
    /* 
     * 中文使用kaiti,其他字符可根據(jù)喜好設(shè)置(可能部分轉(zhuǎn)字符會(huì)出現(xiàn)繪制不出的情況)。
     * 當(dāng)驗(yàn)證碼類型為“ARITHMETIC”時(shí),不要使用“Ransom”字體。(運(yùn)算符和等號繪制不出來)
     */
     option.ImageOption.TextBold = true;// 粗體,該配置2.0.3新增
});

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);
        // 有多處驗(yàn)證碼且過期時(shí)間不一樣,可傳第二個(gè)參數(shù)覆蓋默認(rèn)配置。
        //var info = _captcha.Generate(id,120);
        var stream = new MemoryStream(info.Bytes);
        return File(stream, "image/gif");
    }
    /// <summary>
    /// 演示時(shí)使用HttpGet傳參方便,這里僅做返回處理
    /// </summary>
    [HttpGet("validate")]
    public bool Validate(string id, string code)
    {
        return _captcha.Validate(id, code);
    }
    /// <summary>
    /// 多次校驗(yàn)(https://gitee.com/pojianbing/lazy-captcha/issues/I4XHGM)
    /// 演示時(shí)使用HttpGet傳參方便,這里僅做返回處理
    /// </summary>
    [HttpGet("validate2")]
    public bool Validate2(string id, string code)
    {
        return _captcha.Validate(id, code, false);
    }
}

自定義隨機(jī)驗(yàn)證碼

動(dòng)圖和靜態(tài)圖隨機(jī)出現(xiàn), CaptchaType隨機(jī)。

自定義字體

1、尋找字體

你可以通過fontspace找到自己喜愛的字體。

2、將字體放入項(xiàng)目,并設(shè)置為嵌入資源。

當(dāng)然也可以不作為嵌入資源,放到特定目錄也是可以的,只要對下邊ResourceFontFamilysFinder稍作修改即可。

.NET Framework下使用

新建MVC項(xiàng)目.NET Framework 選擇 4.6.2。

Nuget安裝,先安裝SkiaSharp, 再安裝Lazy.Captcha.Core。

項(xiàng)目效果

項(xiàng)目地址

Gitee:gitee.com/pojianbing/…?

總結(jié)

以上僅展示了LazyCaptcha v2圖形驗(yàn)證碼模塊的部分功能。更多實(shí)用特性和詳細(xì)信息,請大家訪問項(xiàng)目地址。

轉(zhuǎn)自https://juejin.cn/post/7488545861091278875


該文章在 2025/4/3 15:33:41 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲(chǔ)管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产精品18久久久久久vr | 日日夜夜精品 | 北条麻妃 中文字幕 | 一区二区三区爆乳 | 午夜免费在线富婆性饥渴一区二区三区91麻豆成人 | 欧美日韩国产传媒免费看 | 专区日韩精品一区 | 国产又色又爽又黄的A片 | 亚洲国产成人精品无码区在线网站 | 中文字幕一区二区不卡在线 | 亚洲av男人的天堂在线观看 | 含羞草亚洲AV无码久久精品小说 | 亚洲无码日韩无码一二三四区 | 成熟妇女A片高潮免费看 | 韩国精品无码久久一区二区三区 | 国产亚洲中文字幕一区二区 | 国产午夜精品福利久久 | 国产精品丝袜久久久久久不卡 | 国产高清在线男人的天堂 | 人妖专区免费视频精品 | 国产丝袜在线精品丝袜 | 国产无码一级成人精品 | 国产成人精品在线 | 亚洲深深色噜噜狠狠爱网站 | 国产成人精品日本亚洲直接 | 久久亚洲精品成人AV无码网址 | 国产av久久久久精东av | 精品久久久久久无码人妻 | 成人美女黄网站色大免费的 | 人妻在卧室被老板疯狂进入国产 | 免费特级毛片 | 野花社区wwW高清视频 | 无遮挡无码永久视频 | 91精品国产韩国主播门 | 人妻无码中文字幕 | 国产精品综合AV一区二区国产馆 | 色情狠久久AV五月综合五月 | 亚洲人交乣女bbw | 嫩草欧美曰韩国产大片 | 国产成人午夜精品一区二区三区 | 精品国产品国语在线不卡 |