.NET 采用 SkiaSharp 生成二維碼和圖形驗證碼及圖片進行指定區域截取方法實現

在最新版的 .NET 平臺中,微軟在逐步放棄 System.Drawing.Imaging,給出的理由如下:

System.Drawing命名空間對某些操作系統和應用程序類型有一些限制 。
  1. 在Windows ,  System.Drawing 依賴于GDI+操作系統附帶的本機庫 。某些Windows SKUS Windows Server Core 或 Windows Nano)不包含此本機庫作為 OS 的一部分 。如果使用此命名空間并且無法加載庫,則運行時將引發異常 。
  2. 命名空間中的某些類型依賴于 GDI+ ,而 Windows 服務以及 ASP.NET Core 和 System.Drawing ASP.NET 應用不支持 。這些類型在System.Drawing.Common NuGet包中,并包括 System.Drawing.Bitmap 和 System.Drawing.Font。但是,命名空間中的基元類型(如 System.Drawing.Color 、、 和 System.Drawing.Size System.Drawing.Point System.Drawing.Rectangle )可以在任何應用程序中使用 。
  3. 在 .NET 5 和早期版本中,System.Drawing.Common NuGet 包適用于 Windows、Linux 和 macOS 。但是,存在一些平臺差異 。在 Linux 和 macOS 上,GDI+功能由libgdiplus) 庫實現 。默認情況下,大多數 Linux 發行版中不會安裝此庫,也不支持 GDI+ 和 macOS 上Windows的所有功能 。還有一些平臺,其中 libgdiplus 完全不可用 。若要在 Linux 和 macOS 上使用 System.Drawing.Common 包中的類型,必須單獨安裝 libgdiplus 。有關詳細信息,請參閱在Linux 上安裝 .NET或在macOS 上安裝 .NET 。
  4. 在 .NET 6 及更高版本中,System.Drawing.Common NuGet 包僅在 Windows操作系統上受支持 。有關詳細信息,請參閱 僅支持System.Drawing.Common Windows 。
【.NET 采用 SkiaSharp 生成二維碼和圖形驗證碼及圖片進行指定區域截取方法實現】所以我將項目中原先使用 System.Drawing.Imaging 實現的方法采用 SkiaSharp 進行了重寫 。SkiaSharp是 Google 的Skia 圖形庫的 .NET 包裝器,可用于跨移動、服務器和桌面平臺繪制 2D 圖形 。SkiaSharp 可與 OpenGL 一起用于硬件加速渲染 。SkiaSharp 最初由 Mono 開發,但現在由 Microsoft 維護,并根據MIT License提供 。
依賴的 Nuget 組件如下:
  1. SkiaSharp
  2. SkiaSharp.NativeAssets.Linux
  3. SkiaSharp.QrCode
using SkiaSharp.QrCode;namespace Common{public class ImgHelper{/// <summary>/// 生成二維碼/// </summary>/// <param name="text">二維碼內容</param>/// <returns></returns>public static byte[] GetQrCode(string text){using QRCodeGenerator generator = new();using var qr = generator.CreateQrCode(text, ECCLevel.L);SKImageInfo info = new(500, 500);using var surface = SKSurface.Create(info);using var canvas = surface.Canvas;canvas.Render(qr, info.Width, info.Height, SKColors.White, SKColors.Black);using var image = surface.Snapshot();using var data = https://www.huyubaike.com/biancheng/image.Encode(SKEncodedImageFormat.Png, 100);return data.ToArray();}/// /// 從圖片截取部分區域/// ///

推薦閱讀