公交车上荫蒂添的好舒服的电影-公用玩物(np双xing总受)-公用小荡货芊芊-公与妇仑乱hd-攻把受做哭边走边肉楼梯play-古装一级淫片a免费播放口

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

.NET 驗證碼生成神器基于 SkiaSharp 的高性能方案

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

前言

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

項目介紹

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

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

項目特點

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

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

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

項目使用

1、注冊服務

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

2、配置

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

{
  "ConnectionStrings": {
    // 使用Redis緩存時,需要配置此項
    // 使用格式參考 Microsoft.Extensions.Caching.StackExchangeRedis
    "RedisCache": "localhost,password=Aa123456."
  },
  "CaptchaOptions": {
    "CaptchaType": 5, // 驗證碼類型
    "CodeLength": 4, // 驗證碼長度, 要放在CaptchaType設置后  當類型為算術表達式時,長度代表操作的個數, 例如2
    "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", // 包含actionj,epilog,fresnel,headache,lexo,prefix,progbot,ransom,robot,scandal,kaiti
      "FrameDelay": 15, // 每幀延遲,Animation=true時有效, 默認30
      "BackgroundColor": "#ffffff", //  格式: rgb, rgba, rrggbb, or rrggbbaa format to match web syntax, 默認#fff
      "ForegroundColors": "", //  顏色格式同BackgroundColor,多個顏色逗號分割,隨機選取。不填,空值,則使用默認顏色集
      "Quality": 100, // 圖片質量(質量越高圖片越大,gif調整無效可能會更大)
      "TextBold": false // 粗體,該配置2.0.3新增
    }
  }
}

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

代碼配置

// 全部配置
builder.Services.AddCaptcha(builder.Configuration, option =>
{
    option.CaptchaType = CaptchaType.WORD; // 驗證碼類型
    option.CodeLength = 6; // 驗證碼長度, 要放在CaptchaType設置后.  當類型為算術表達式時,長度代表操作的個數
    option.ExpirySeconds = 30; // 驗證碼過期時間
    option.IgnoreCase = true; // 比較時是否忽略大小寫
    option.StoreageKeyPrefix = ""; // 存儲鍵前綴
    option.ImageOption.Animation = true; // 是否啟用動畫
    option.ImageOption.FrameDelay = 30; // 每幀延遲,Animation=true時有效, 默認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; // 字體
    
    /* 
     * 中文使用kaiti,其他字符可根據喜好設置(可能部分轉字符會出現繪制不出的情況)。
     * 當驗證碼類型為“ARITHMETIC”時,不要使用“Ransom”字體。(運算符和等號繪制不出來)
     */
     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);
        // 有多處驗證碼且過期時間不一樣,可傳第二個參數覆蓋默認配置。
        //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>
    /// 多次校驗(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);
    }
}

自定義隨機驗證碼

動圖和靜態圖隨機出現, 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 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 成人无码区免费aⅴ片在线观看 | 精品特黄毛片免费在线观 | 国产成人手机在线播放 | 韩国三级大乳在线观看 | 国产高清在线一区免费 | 精品无人区乱码一区二区三区手机 | 91天堂一区二区 | 国产在线精品一区二区夜色 | 国产午夜精品精品 | 精品人妻中文无码av在线 | 国产av人人夜夜澡人人爽麻豆 | 国产午夜理论电影在线观看 | 国产一区二区三区乱码在线观看 | 国产精品成人免费精品自在线 | 成人欧美一区二区三区在线观看 | 精品国产免费一区二区三区香蕉 | 国产成人aⅴ片在线观看免费 | 潮喷失禁大喷水 | 国产中文在线 | 国产欧美精品综合一区 | 动漫av永久无码精品每 | 91制片厂果冻星空传媒战争 | 国产丝袜视频在线影院 | 91人妻无码精品一区二区三区 | 白嫩无码人妻丰满熟妇啪啪区百度 | 精品一区二区三区免费站 | 国产日韩欧美一区二区视频在线观看 | 99久久国产精品免费热麻豆 | 国产亚洲精品久久久一区 | 国产福利一区二区三区四区 | 99ri精品| 东京无码熟妇人妻av | 国产无码久久久久久 | 精品人妻无码专区在线无广告 | 国产办公室秘 | 国产成人一区二区三区动漫 | 国产精品一级毛片在线观看 | 91麻豆国产在线 | 成人无码精品一区二区在线观看 | 高清亚洲日韩欧洲不卡在线3d | 国产经典av三 |