精品熟人妻一区二区三区四区不卡-精品爽黄69天堂a-精品水蜜桃久久久久久久-精品丝袜国产自在线拍-精品丝袜国产自在线拍a-精品丝袜国产自在线拍免费看

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

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

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

前言

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

項目介紹

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

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

項目特點(diǎn)

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

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

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

項目使用

1、注冊服務(wù)

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

2、配置

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

{
  "ConnectionStrings": {
    // 使用Redis緩存時,需要配置此項
    // 使用格式參考 Microsoft.Extensions.Caching.StackExchangeRedis
    "RedisCache": "localhost,password=Aa123456."
  },
  "CaptchaOptions": {
    "CaptchaType": 5, // 驗(yàn)證碼類型
    "CodeLength": 4, // 驗(yàn)證碼長度, 要放在CaptchaType設(shè)置后  當(dāng)類型為算術(shù)表達(dá)式時,長度代表操作的個數(shù), 例如2
    "ExpirySeconds": 60, // 驗(yàn)證碼過期秒數(shù)
    "IgnoreCase": true, // 比較時是否忽略大小寫
    "StoreageKeyPrefix": "", // 存儲鍵前綴
    "ImageOption": {
      "Animation": false, // 是否啟用動畫
      "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時有效, 默認(rèn)30
      "BackgroundColor": "#ffffff", //  格式: rgb, rgba, rrggbb, or rrggbbaa format to match web syntax, 默認(rèn)#fff
      "ForegroundColors": "", //  顏色格式同BackgroundColor,多個顏色逗號分割,隨機(jī)選取。不填,空值,則使用默認(rèn)顏色集
      "Quality": 100, // 圖片質(zhì)量(質(zhì)量越高圖片越大,gif調(diào)整無效可能會更大)
      "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ù)
    option.ExpirySeconds = 30; // 驗(yàn)證碼過期時間
    option.IgnoreCase = true; // 比較時是否忽略大小寫
    option.StoreageKeyPrefix = ""; // 存儲鍵前綴
    option.ImageOption.Animation = true; // 是否啟用動畫
    option.ImageOption.FrameDelay = 30; // 每幀延遲,Animation=true時有效, 默認(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)字符會出現(xiàn)繪制不出的情況)。
     * 當(dāng)驗(yàn)證碼類型為“ARITHMETIC”時,不要使用“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ù)覆蓋默認(rèn)配置。
        //var info = _captcha.Generate(id,120);
        var stream = new MemoryStream(info.Bytes);
        return File(stream, "image/gif");
    }
    /// <summary>
    /// 演示時使用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)
    /// 演示時使用HttpGet傳參方便,這里僅做返回處理
    /// </summary>
    [HttpGet("validate2")]
    public bool Validate2(string id, string code)
    {
        return _captcha.Validate(id, code, false);
    }
}

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

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

自定義字體

1、尋找字體

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

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

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

.NET Framework下使用

新建MVC項目.NET Framework 選擇 4.6.2。

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

項目效果

項目地址

Gitee:gitee.com/pojianbing/…?

總結(jié)

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

轉(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)度、堆場、車隊、財務(wù)費(fèi)用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 无码专区久久综合久中文字幕 | 自拍偷拍中文字幕 | 国产美女精品 | 无码国模大尺度视频在线观看 | 国产91密拍在线高清无删减 | 国产精品天干天干在线综合 | 午夜国产福利看片 | 国产一级免费 | 人人玩人人干 | 国产精品欧美在线 | 熟妇人妻一区二区三区四区 | 国产乱子经典视频在线观看 | 精品久久人人爽天天玩人人妻 | 国产欧美日本韩高清视频一区 | 国产精品久久久久久一级毛片 | 久久99热这里只频精品66 | 亚洲欧美久 | 欧美影院首页 | 成人夜晚看片如何选择合适的影片 | 97制片厂爱豆传媒视频在线 | 日本xxx片免费高清在线 | 成年女人免费视频播放大全 | 97久久超碰极品视觉盛宴 | 中文字幕精品aⅴ内射夜夜 中文字幕精品久久久久久 中文字幕精品久久久久人妻 | 91精品啪在线观看国产电影 | 无码av久久久久久久久 | 亚洲精品宾馆在线精品酒店 | 成人午夜精品一区二区 | 国产精品直 | 日韩欧美中文字幕第 | 成人黄app福 | 精品国内自产拍在线观看网站 | 人人婷婷人人澡人人爽 | 国内自拍视频一 | 国产日韩综合一区二区性色av | 无套内谢少妇毛片a片打工皇帝 | 国产亚洲av夜间福利香蕉导航 | 国产无套粉嫩白浆在线精品 | 日韩精品一区二三区中文 | 国产亚洲精品aaaa片在线播放 | 91男女免费福利 |