二維碼已成為現代應用的常見組成部分,廣泛應用于用戶身份驗證、移動支付、商品包裝和活動票務等場景。很多使用 C# 開發的系統需要從圖像或掃描件中提取二維碼信息,因此掌握二維碼識別技術顯得尤為重要。
為滿足這類需求,開發者需要一種既可靠又易于集成的二維碼解碼方式。本文將通過一個簡潔明了的示例,演示如何借助?Spire.Barcode for .NET?使用 C# 從圖像中讀取二維碼,并在桌面或服務器端項目中輕松實現識別功能。
? ?Spire.Barcode for .NET試用下載
1. 項目配置
首先我們需要使用支持二維碼解碼的 .NET 條碼庫。E-iceblue旗下Spire系列產品是國產化文檔處理和轉換領域的佼佼者,支持國產化信創。本指南采用?Spire.Barcode for .NET,該庫提供簡潔API幫助開發者輕松從圖片文件和數據流讀取二維碼。
1.1 通過NuGet安裝庫
可通過NuGet包管理器安裝:
Install-Package Spire.Barcode
1.2 創建控制臺項目
演示案例使用 Visual Studio 創建 C# 控制臺應用:
- 支持?.NET Framework、.NET Core/.NET 6+、ASP.NET?或 Xamarin 跨平臺移動開發
- 添加?Spire.Barcode.dll?引用(如未使用NuGet)
2. 用 C# 從圖片讀取二維碼
通過庫提供的靜態方法?BarcodeScanner.Scan()?即可從圖片文件讀取二維碼。該方法接收圖片路徑和?BarcodeType?作為參數,返回匹配指定類型(如二維碼)的所有解碼結果。此方法支持 JPG、PNG、EMF 等圖片格式,適用于控制臺應用、桌面應用或處理上傳圖像的服務端程序。
2.1 C# 示例代碼:從圖片文件解碼二維碼
using Spire.Barcode;class Program {static void Main(string[] args){// 加載二維碼圖片string imagePath = @"C:\qr-code.png";// 條碼掃描器從圖片讀取二維碼string[] results = BarcodeScanner.Scan(imagePath, BarCodeType.QRCode);// 顯示解碼結果foreach (string result in results){Console.WriteLine("二維碼內容: " + result + "\n");}} }
二維碼圖片及 C# 解碼效果:
2.2 代碼說明
- Scan()?方法讀取并解碼圖片中所有條碼
- BarCodeType.QRCode?參數確保僅檢測二維碼(可修改為其他類型)
- 返回數組格式以支持多二維碼場景
3. 用 C# 從數據流讀取二維碼
在Web API或現代應用中處理內存圖像時,常需操作?Stream?對象——例如處理文件上傳或讀取云存儲時。
BarcodeScanner.Scan()?方法直接支持?Stream?輸入,無需轉換即可輕松解碼二維碼:
using Spire.Barcode; using System.IO;class Program {static void Main(string[] args){using (FileStream fs = new FileStream(@"C:\qr-code.png", FileMode.Open, FileAccess.Read)){// 直接從數據流解析二維碼string[] results = BarcodeScanner.Scan(fs, BarCodeType.QRCode, false);foreach (string result in results){Console.WriteLine("二維碼內容: " + result);}}} }
此方法特別適用于 WPF 或 ASP.NET Core 等需要內存處理的應用。
4. 提高準確率與錯誤處理
實際場景中可能因圖像質量導致識別失敗,以下是提升解碼成功率的實踐方案:
4.1 優化識別準確率
- 使用高清圖片,避免模糊或過度壓縮
- 保留靜區(二維碼周圍空白區域)
- 優先選擇PNG格式保證清晰度
- 避免透視畸變——使用正對拍攝的圖片
4.2 增強錯誤處理
通過 try-catch 塊優化異常處理:
try {string[] results = BarcodeScanner.Scan(imagePath, BarCodeType.QRCode);if (results.Length == 0){Console.WriteLine("未檢測到二維碼");}else{Console.WriteLine("二維碼內容: " + results[0]);} } catch (Exception ex) {Console.WriteLine("解碼錯誤: " + ex.Message); }
5. 進階技巧:獲取二維碼在圖片上的坐標
有時需要獲取二維碼在圖片中的精確位置(用于裁剪或標注),可通過?ScanInfo()?方法獲取邊界框:
ScanResult[] results = scanner.ScanInfo(imagePath, BarCodeType.QRCode); foreach (BarcodeInfo result in results) {Console.WriteLine("內容: " + result.DataString);Console.WriteLine($"坐標: " + string.Join(",", result.Vertexes.Select(p => $"({p.X},{p.Y})")) + "\n"); }
該方案可同時獲取二維碼數據和位置信息。
效果演示:
6. 常見問題
如何在 C# 中讀取二維碼?
使用?Spire.Barcode for .NET?庫的?BarcodeScanner.Scan()?方法,幾行代碼即可實現從圖片或數據流讀取二維碼。
如何讀取其他類型條碼(非二維碼)?
向?Scan()?方法傳入圖片路徑后,將自動檢測所有支持類型。若需限定檢測類型(如僅 QR 碼或 Code128),傳入對應的?BarCodeType?參數即可。
如何掃描一張圖片上的多個二維碼?
直接使用?BarcodeScanner.Scan()?方法即可掃描一張圖片上的多個二維碼。該方法支持自動識別圖片上條碼的類型,并返回所有條碼的掃描結果。
7. 總結
使用?Spire.Barcode for .NET?庫,僅需少量代碼即可在 C# 中實現二維碼讀取。該方案支持圖片和數據流解碼,完美適配桌面應用、服務端及 WPF 程序,且配置簡單性能優異。
基于此基礎,可進一步探索二維碼生成、文檔集成和實時掃描等進階應用。