日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

.NET Core使用SkiaSharp快速生成二維碼( 真正跨平臺方案)

來源: 責編: 時間:2023-10-08 07:06:02 288觀看
導讀前言在.NET 6之前我們一直是使用QRCoder來生成二維碼(QRCoder是一個非常強大的生成二維碼的組件,用到了System.Drawing.Common 包),然后從.NET 6開始,當為非 Windows 操作系統編譯引用代碼時,平臺分析器會發出編譯時警告。

前言

在.NET 6之前我們一直是使用QRCoder來生成二維碼(QRCoder是一個非常強大的生成二維碼的組件,用到了System.Drawing.Common 包),然后從.NET 6開始,當為非 Windows 操作系統編譯引用代碼時,平臺分析器會發出編譯時警告。異常如下:Iru28資訊網——每日最新資訊28at.com

System.TypeInitializationException : The type initializer for 'Gdip' threw an exception.      ---- System.PlatformNotSupportedException : System.Drawing.Common is not supported on non-Windows platforms. See https://aka.ms/systemdrawingnonwindows for more information.      Stack Trace:           at System.Drawing.SafeNativeMethods.Gdip.GdipCreateBitmapFromFile(String filename, IntPtr& bitmap)        /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(42,0): at System.Drawing.Bitmap..ctor(String filename, Boolean useIcm)        /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(25,0): at System.Drawing.Bitmap..ctor(String filename)        /_/src/libraries/System.Resources.ResourceManager/tests/ResourceManagerTests.cs(270,0): at System.Resources.Tests.ResourceManagerTests.EnglishImageResourceData()+MoveNext()        /_/src/libraries/System.Linq/src/System/Linq/Select.cs(136,0): at System.Linq.Enumerable.SelectEnumerableIterator`2.MoveNext()        ----- Inner Stack Trace -----        /_/src/libraries/System.Drawing.Common/src/System/Drawing/LibraryResolver.cs(31,0): at System.Drawing.LibraryResolver.EnsureRegistered()        /_/src/libraries/System.Drawing.Common/src/System/Drawing/GdiplusNative.Unix.cs(65,0): at System.Drawing.SafeNativeMethods.Gdip.PlatformInitialize()        /_/src/libraries/System.Drawing.Common/src/System/Drawing/Gdiplus.cs(27,0): at System.Drawing.SafeNativeMethods.Gdip..cctor()

報錯原因

由于 System.Drawing.Common 被設計為 Windows 技術的精簡包裝器,因此其跨平臺實現欠佳。Iru28資訊網——每日最新資訊28at.com

libgdiplus 是本機端 System.Drawing.Common 跨平臺實現的主要提供程序。libgdiplus 實際上是對 System.Drawing.Common 所依賴的 Windows 部分的重新實現。該實現使 libgdiplus 成為一個重要的組件。它大約有 30,000 行 C 代碼,大部分未經測試,而且缺少很多功能。libgdiplus 還具有許多用于圖像處理和文本呈現的外部依賴項,例如 cairo、pango 和其他本機庫。這些依賴項使得維護和交付組件更具挑戰性。自從包含 Mono 跨平臺實現以來,我們已將許多從未得到修復的問題重定向到 libgdiplus。相比之下,我們采用的其他外部依賴項,例如 icu 或 openssl,都是高質量的庫。使 libgdiplus 的功能集和質量與 .NET 堆棧的其余部分相媲美是不可行的。Iru28資訊網——每日最新資訊28at.com

官方建議

在非 Windows 環境中,推薦使用 SkiaSharp 和 ImageSharp 等庫來完成跨平臺的圖像處理操作。這些庫提供了更全面和穩定的功能支持,適用于大多數圖形操作需求。而 System.Drawing.Common 將主要繼續在 Windows 窗體和 GDI+ 的上下文中進行演化。Iru28資訊網——每日最新資訊28at.com

SkiaSharp介紹

SkiaSharp是由Mono團隊維護的開源項目,它是基于Google的Skia圖形庫的.NET跨平臺綁定,提供了強大的2D圖形繪制和處理功能,適用于多個平臺,包括Windows、macOS、Linux、iOS和Android,可用于創建高性能的、可移植的2D圖形應用程序。Iru28資訊網——每日最新資訊28at.com

SkiaSharp 提供了跨平臺綁定,適用于以下平臺:Iru28資訊網——每日最新資訊28at.com

  • .NET Standard 1.3
  • .NET Core
  • .NET 6
  • Tizen
  • Android
  • iOS
  • tvOS
  • macOS
  • Mac Catalyst
  • WinUI 3 (Windows App SDK / Uno Platform)
  • Windows Classic Desktop (Windows.Forms / WPF)
  • Web Assembly (WASM)
  • Uno Platform (iOS / macOS / Android / WebAssembly)

這些平臺可以使用 SkiaSharp 來進行跨平臺的圖形渲染和繪制操作。Iru28資訊網——每日最新資訊28at.com

使用SkiaSharp快速生成二維碼

1、安裝SkiaSharp.QrCode庫

使用SkiaSharp生成二維碼的QR碼生成器(無需使用System.Drawing)。Iru28資訊網——每日最新資訊28at.com

圖片圖片Iru28資訊網——每日最新資訊28at.com

2、生成二維碼圖片

/// <summary>        /// 生成二維碼圖片        /// </summary>        public static void GenerateQRCode()        {            var qrCodeContent = "追逐時光者";            using (var generator = new QRCodeGenerator())            {                // 創建二維碼(并設置糾錯能力最高級)                var createQrCode = generator.CreateQrCode(qrCodeContent, ECCLevel.H);                var skImageInfo = new SKImageInfo(300, 300);                // 創建SkiaSharp畫布                using (var surface = SKSurface.Create(skImageInfo))                {                    var canvas = surface.Canvas;                    // 渲染二維碼到畫布                    canvas.Render(createQrCode, skImageInfo.Width, skImageInfo.Height);                    using (var image = surface.Snapshot())// 獲取畫布快照                    using (var data = image.Encode(SKEncodedImageFormat.Png, 100))// 編碼畫布快照為PNG格式的數據                    using (var stream = File.OpenWrite(@"MyQRCode.png"))                    {                        data.SaveTo(stream);// 將數據保存到文件流中,生成二維碼圖片                    }                }            }        }

二維碼的糾錯能力通常分為四個級別

  • 在生成二維碼時,糾錯能力(Error Correction Capability)指的是QR碼中包含的冗余信息,用于修復可能出現的損壞或錯誤。QR碼可以通過添加冗余信息來提高其容錯性,即使在一定程度上受到損壞或噪聲的干擾,仍然可以正確地解碼和還原二維碼的內容。
  • QR碼的糾錯能力通常分為四個級別,從低到高依次為:L、M、Q、H。其中,糾錯能力最低的級別為L,最高的級別為H。糾錯能力越高,二維碼中包含的冗余信息就越多,因此可以更好地恢復丟失或損壞的數據。
namespace SkiaSharp.QrCode{    public enum ECCLevel    {        L,        M,        Q,        H    }}

3、查看生成效果

圖片圖片Iru28資訊網——每日最新資訊28at.com

參考文章

  • https://learn.microsoft.com/zh-cn/dotnet/core/compatibility/core-libraries/6.0/system-drawing-common-windows-only
  • QRCoder:https://github.com/codebude/QRCoder

本文鏈接:http://www.www897cc.com/showinfo-26-12360-0.html.NET Core使用SkiaSharp快速生成二維碼( 真正跨平臺方案)

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 有了這個代碼模板,合并排序手到擒來

下一篇: HTMX簡介:無需借助JavaScript的動態HTML

標簽:
  • 熱門焦點
  • 跑分安卓第一!Redmi K60至尊版8月發布!盧偉冰:目標年度性能之王

    8月5日消息,Redmi K60至尊版將于8月發布,在此前舉行的戰略發布會上,官方該機將搭載搭載天璣9200+處理器,安兔兔V10跑分超177萬分,是目前安卓陣營最高的分數
  • 摸魚心法第一章——和配置文件說拜拜

    為了能摸魚我們團隊做了容器化,但是帶來的問題是服務配置文件很麻煩,然后大家在群里進行了“親切友好”的溝通圖片圖片圖片圖片對比就對比,簡單對比下獨立配置中心和k8s作為配
  • 讓我們一起聊聊文件的操作

    文件【1】文件是什么?文件是保存數據的地方,是數據源的一種,比如大家經常使用的word文檔、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存數據,它既可以保
  • 每天一道面試題-CPU偽共享

    前言:了不起:又到了每天一到面試題的時候了!學弟,最近學習的怎么樣啊 了不起學弟:最近學習的還不錯,每天都在學習,每天都在進步! 了不起:那你最近學習的什么呢? 了不起學弟:最近在學習C
  • 2023年,我眼中的字節跳動

    此時此刻(2023年7月),字節跳動從未上市,也從未公布過任何官方的上市計劃;但是這并不妨礙它成為中國最受關注的互聯網公司之一。從2016-17年的抖音強勢崛起,到2018年的&ldquo;頭騰
  • 電視息屏休眠仍有網絡上傳 愛奇藝被質疑“薅消費者羊毛”

    記者丨寧曉敏 見習生丨汗青出品丨鰲頭財經(theSankei) 前不久,愛奇藝發布了一份亮眼的一季報,不僅營收和會員營收創造歷史最佳表現,其運營利潤也連續6個月實現增長。自去年年初
  • 小米公益基金會捐贈2500萬元馳援北京、河北暴雨救災

    8月2日消息,今日小米科技創始人雷軍在其微博上發布消息稱,小米公益基金會宣布捐贈2500萬元馳援北京、河北暴雨救災。攜手抗災,京冀安康!以下為公告原文
  • 小米汽車電池信息疑似曝光:容量101kWh,支持800V高壓快充

    7月14日消息,今日一名博主在社交媒體發布了一張疑似小米汽車電池信息的照片,顯示該電池包正是寧德時代麒麟電池,容量為101kWh,電壓為726.7V,可以預測小
  • 2299元起!iQOO Pad開啟預售:性能最強天璣平板

    5月23日,iQOO如期舉行了新品發布會,除了首發安卓最強旗艦處理器的iQOO Neo8系列新機外,還在發布會上推出了旗下首款平板電腦——iQOO Pad,其搭載了天璣
Top 主站蜘蛛池模板: 台中县| 怀柔区| 石家庄市| 扬州市| 龙海市| 邹平县| 无极县| 奉贤区| 信宜市| 怀集县| 平阴县| 宜章县| 当雄县| 丹巴县| 武定县| 枞阳县| 丰原市| 荥阳市| 临邑县| 措勤县| 桦甸市| 姜堰市| 盘山县| 西吉县| 正蓝旗| 开江县| 亳州市| 微博| 湘乡市| 巢湖市| 陇川县| 墨竹工卡县| 藁城市| 五河县| 武清区| 临夏县| 大石桥市| 行唐县| 绥德县| 九寨沟县| 林州市|