欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

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

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

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

前言

在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