跳過到頁腳內容
使用 IRONQR

QR代碼.NET Core:在C#中讀取和生成QR代碼

在.NET Core上建立 Web 或企業應用程式時,對二維碼的支援(用於庫存追蹤、支付流程或雙重認證)是一個常見的需求。 與其將開發週期浪費在底層編碼演算法上,不如使用一個能夠處理整個工作流程的專用函式庫。 IronQR為.NET提供完整的二維碼解決方案,涵蓋從基本生成到機器學習驅動的讀取和高級糾錯等所有功能。

準備好親自嘗試了嗎? 立即開始免費試用,看看您能多快將二維碼功能添加到您的專案中。

立即開始在您的項目中使用 IronQR 並免費試用。

第一步:
green arrow pointer

如何安裝二維碼庫?

透過NuGet安裝IronQR只需幾秒鐘。 開啟 Visual Studio,前往"工具"> "NuGet套件管理員">"管理解決方案的NuGet套件" ,搜尋 IronQR,然後按一下"安裝" 。 此軟體套件依賴項極少,開箱即用,支援 Windows、macOS 和 Linux 系統。

Install-Package IronQR

IronQR 的目標平台為.NET Core 6、7、8、9 和 10,以及.NET Framework 4.6.2 及更高版本。 對於跨平台項目,SkiaSharp 整合可以處理非 Windows 運行時上的映像處理。 此程式庫無需額外的執行時間配置即可與ASP.NET Core Web 應用程式、控制台應用程式和桌面解決方案搭配使用。 安裝完成後,所有必要的擴充方法和類型均可立即使用。

如何從影像中讀取基本二維碼?

從圖像檔案中讀取二維碼資料只需要幾行程式碼。 QrReader 類別使用先進的機器學習模型來評估影像品質並自動選擇正確的分割模式,即使輸入影像不理想,也能提供準確的結果。

using IronQr;
using IronSoftware.Drawing;

// Load image containing QR code
var inputBmp = AnyBitmap.FromFile("qr-sample.png");
// Create QrImageInput from the bitmap
QrImageInput imageInput = new QrImageInput(inputBmp);
// Initialize QR Reader with ML model
QrReader reader = new QrReader();
// Read and decode all QR codes in the image
IEnumerable<QrResult> results = reader.Read(imageInput);
// Output decoded text strings
foreach (var qrCode in results)
{
    Console.WriteLine($"QR Code Value: {qrCode.Value}");
    Console.WriteLine($"URL: {qrCode.Url}");
}
using IronQr;
using IronSoftware.Drawing;

// Load image containing QR code
var inputBmp = AnyBitmap.FromFile("qr-sample.png");
// Create QrImageInput from the bitmap
QrImageInput imageInput = new QrImageInput(inputBmp);
// Initialize QR Reader with ML model
QrReader reader = new QrReader();
// Read and decode all QR codes in the image
IEnumerable<QrResult> results = reader.Read(imageInput);
// Output decoded text strings
foreach (var qrCode in results)
{
    Console.WriteLine($"QR Code Value: {qrCode.Value}");
    Console.WriteLine($"URL: {qrCode.Url}");
}
$vbLabelText   $csharpLabel

輸入二維碼

QR Code Generator .NET Core:只需幾行程式碼即可讀取和產生二維碼:圖片 1 - 輸入二維碼

輸出

. .NET Core二維碼產生器:只需幾行程式碼即可讀取和產生二維碼:圖 2 - 二維碼掃描輸出範例

QrReader.Read() 方法處理 QrImageInput 並傳回 IEnumerable<QrResult>,其中每個結果都包含解碼後的文字、編碼後的 URL 以及圖像中 QR 符號的空間位置。 該庫接受位元組數組、檔案路徑和對象,讓您可以靈活地適應任何專案架構——無論您是從磁碟、資料庫還是即時攝影機流中讀取資料。

IronQR的閱讀器所採用的機器學習模型使其區別於純粹的演算法庫。 它能夠處理現實世界中的缺陷,例如運動模糊、部分遮蔽和光照不均,而無需手動預處理或閾值調整。

如何提取高級二維碼資料?

除了基本的數值解碼之外, IronQR還公開了每個掃描符號的座標、原始資料段和模組級資訊。 這對於需要確切知道二維碼在頁面上位置的文件處理工作流程,或者對於必須在單一影像中處理多個二維碼的應用程式至關重要。

using IronQr;
using IronSoftware.Drawing;

var inputBmp = AnyBitmap.FromFile("document-with-qr.png");
QrImageInput imageInput = new QrImageInput(inputBmp);
QrReader reader = new QrReader();
IEnumerable<QrResult> results = reader.Read(imageInput);
foreach (var qrCode in results)
{
    // Access decoded value
    Console.WriteLine($"Data: {qrCode.Value}");
    // Get corner coordinate positions
    foreach (PointF point in qrCode.Points)
    {
        Console.WriteLine($"Position: {point.X}, {point.Y}");
    }
}
using IronQr;
using IronSoftware.Drawing;

var inputBmp = AnyBitmap.FromFile("document-with-qr.png");
QrImageInput imageInput = new QrImageInput(inputBmp);
QrReader reader = new QrReader();
IEnumerable<QrResult> results = reader.Read(imageInput);
foreach (var qrCode in results)
{
    // Access decoded value
    Console.WriteLine($"Data: {qrCode.Value}");
    // Get corner coordinate positions
    foreach (PointF point in qrCode.Points)
    {
        Console.WriteLine($"Position: {point.X}, {point.Y}");
    }
}
$vbLabelText   $csharpLabel

輸入二維碼

. .NET Core二維碼產生器:只需幾行程式碼即可讀取和產生二維碼:圖 3 - 輸入二維碼

高級二維碼讀取結果

QR Code Generator .NET Core:只需幾行程式碼即可讀取和產生二維碼:圖 4 - 高階二維碼資料擷取結果

QrResult.Points 集合包含偵測到的 QR 符號在像素空間中的四個角座標。 您的應用程式可以使用這些在文件影像上疊加邊界框,裁剪二維碼區域以進行進一步處理,或將位置資料傳遞給下游系統,該系統將物理座標映射到邏輯文件位置。

IronQR透過同一個機器學習流程處理包含自訂嵌入式標誌、損壞模組或低解析度輸入的二維碼。該庫不需要單獨的預處理步驟——檢測和解碼只需一次 Read() 呼叫即可完成。

糾錯等級如何影響二維碼品質?

糾錯機制允許二維碼掃描器即使在部分程式碼被遮蔽、印刷不良或物理損壞的情況下也能恢復原始資料。 二維碼標準定義了四個等級——低(L)、中(M)、四分位數(Q)和高(H)——每個等級都以儲存容量換取損壞容忍度。

等級 復原能力 最佳用途
L 約7% 清晰的數位顯示屏,最大數據密度
M 約15% 通用列印應用程式
約25% 工業標籤,預計會有輕微磨損
H 約30% 嵌入式標誌、戶外或高磨損表面

產生二維碼時,指定更高的糾錯等級可確保輸出在實際掃描條件下保持穩定:

using IronQr;
using IronSoftware.Drawing;

// Configure QR options with high error correction
var qrOptions = new QrOptions(QrErrorCorrectionLevel.High, 20);
// Generate a QR code with specified error correction
QrCode myQr = QrWriter.Write("https://ironsoftware.com", qrOptions);
// Save as PNG image
AnyBitmap qrImage = myQr.Save();
qrImage.SaveAs("high-error-correction-qr.png");
using IronQr;
using IronSoftware.Drawing;

// Configure QR options with high error correction
var qrOptions = new QrOptions(QrErrorCorrectionLevel.High, 20);
// Generate a QR code with specified error correction
QrCode myQr = QrWriter.Write("https://ironsoftware.com", qrOptions);
// Save as PNG image
AnyBitmap qrImage = myQr.Save();
qrImage.SaveAs("high-error-correction-qr.png");
$vbLabelText   $csharpLabel

輸出

. .NET Core二維碼產生器:只需幾行程式碼即可讀取和產生二維碼:圖 5 - 產生的二維碼具有高糾錯等級

QrOptions 建構子接受錯誤修正等級和最大版本號。 版本 40 代碼最多可儲存 7,089 個數字字符,而版本 1 代碼僅可儲存 41 個。設定較低的最大版本可限制輸出大小,這在需要一批產品具有一致的實體尺寸時非常有用。 糾錯等級越高,用於冗餘的模組就越多,從而降低任何給定版本的淨資料容量。

IronQR中的容錯功能與此特性相輔相成-當讀取以更高糾錯等級產生的程式碼時,該函式庫可以從那些使用純演算法解碼器會完全失敗的程式碼中恢復資料。

如何產生包含國際字元的二維碼?

IronQR支援所有類型的 QR 編碼模式:數字、字母數字、位元組和漢字。 對於日文文字和其他Unicode內容,該函式庫會自動選擇最節省空間的編碼方式:

using IronQr;
using IronSoftware.Drawing;

// Generate QR that encodes Japanese Unicode text
QrCode japaneseQr = QrWriter.Write("こんにちは世界");
// The library selects Kanji mode automatically
AnyBitmap qrImage = japaneseQr.Save();
qrImage.SaveAs("japanese-qr.png");
using IronQr;
using IronSoftware.Drawing;

// Generate QR that encodes Japanese Unicode text
QrCode japaneseQr = QrWriter.Write("こんにちは世界");
// The library selects Kanji mode automatically
AnyBitmap qrImage = japaneseQr.Save();
qrImage.SaveAs("japanese-qr.png");
$vbLabelText   $csharpLabel

QR 圖碼輸出

. .NET Core二維碼產生器:只需幾行程式碼即可讀取和產生二維碼:圖 6 - 輸出二維碼

漢字編碼每個模組打包兩個位元組而不是八個位元,因此相同版本的日語二維碼比 UTF-8 位元組模式的等效二維碼儲存的字元要多得多。 對於混合內容(例如 URL 後面跟著日文文字), IronQR會將輸入分割成多個部分,並以最佳模式對每個部分進行編碼。 您無需手動指定段邊界或呼叫編碼輔助函數; 編碼流程會為你處理這一切。

這種自動選擇還涵蓋擴展通道解釋 (ECI) 標記,該標記向掃描器發出信號,表明正在使用非標準字元集。 面向國際市場的應用程式可以直接將任何 Unicode 字串傳遞給 QrWriter.Write(),而無需單獨配置。

如何使用有效載荷產生器產生結構化二維碼資料?

編碼純 URL 的二維碼適用於簡單的連結共享,但許多應用程式需要編碼結構化資料——WiFi 憑證、 vCard 格式的聯絡人卡片或事件資料。 手動格式化這些有效載荷容易出錯; 缺少分號或欄位順序錯誤會導致掃描器錯誤解讀資料。

IronQR提供了有效負載輔助函數,可以正確建構這些結構化字串:

using IronQr;
using IronSoftware.Drawing;

// Generate QR code with URL payload
var urlQrCode = QrWriter.Write("https://ironsoftware.com/csharp/qr/");
// Save QR as PNG image file
AnyBitmap qrImage = urlQrCode.Save();
qrImage.SaveAs("url-qr-code.png");
Console.WriteLine("QR code generated successfully.");
using IronQr;
using IronSoftware.Drawing;

// Generate QR code with URL payload
var urlQrCode = QrWriter.Write("https://ironsoftware.com/csharp/qr/");
// Save QR as PNG image file
AnyBitmap qrImage = urlQrCode.Save();
qrImage.SaveAs("url-qr-code.png");
Console.WriteLine("QR code generated successfully.");
$vbLabelText   $csharpLabel

已建立二維碼

. .NET Core二維碼產生器:只需幾行程式碼即可讀取和產生二維碼:圖 7 - 由 URL 產生的二維碼

QrWriter.Write() 方法接受純字串或結構化有效負載物件。 對於 WiFi 網絡,有效載荷會將 SSID、密碼和安全類型編碼為 Android 和 iOS 掃描器可識別的格式。對於聯絡訊息,輸出遵循大多數行動二維碼閱讀器使用的 MeCard 標準。 生成功能頁面記錄了所有支援的有效負載類型及其必要欄位。

該庫可以輸出像素尺寸可配置的影像。 對於生產用途,產生最小 200x200 像素的條碼可確保從典型的智慧型手機距離進行可靠掃描。 較大的尺寸有利於戶外或印刷應用,因為在這些應用中,掃描距離會超過一公尺。

如何自訂二維碼外觀?

IronQR讓您可以控制產生的二維碼的視覺外觀,同時又不影響其可掃描性。 您可以變更前景和背景顏色,套用自訂品牌標識,或將徽標嵌入到中心的靜默區。

using IronQr;
using IronSoftware.Drawing;

// Define custom colors for the QR code
var darkColor = Color.FromArgb(30, 30, 120);   // Deep navy foreground
var lightColor = Color.White;

var options = new QrOptions(QrErrorCorrectionLevel.High, maxVersion: 20)
{
    BackgroundColor = lightColor,
    Color = darkColor,
    // Embed a logo image into the QR center
    Logo = AnyBitmap.FromFile("logo.png")
};

QrCode styledQr = QrWriter.Write("https://ironsoftware.com/csharp/qr/", options);
AnyBitmap output = styledQr.Save();
output.SaveAs("branded-qr.png");
using IronQr;
using IronSoftware.Drawing;

// Define custom colors for the QR code
var darkColor = Color.FromArgb(30, 30, 120);   // Deep navy foreground
var lightColor = Color.White;

var options = new QrOptions(QrErrorCorrectionLevel.High, maxVersion: 20)
{
    BackgroundColor = lightColor,
    Color = darkColor,
    // Embed a logo image into the QR center
    Logo = AnyBitmap.FromFile("logo.png")
};

QrCode styledQr = QrWriter.Write("https://ironsoftware.com/csharp/qr/", options);
AnyBitmap output = styledQr.Save();
output.SaveAs("branded-qr.png");
$vbLabelText   $csharpLabel

嵌入徽標會減少有效資料區域,因此當提供徽標時,庫需要 H 級糾錯。 中心預留的安靜區域約佔代碼表面積的 30%,這在 H 級的恢復能力範圍內。 該程式庫會自動強制執行此約束——如果您在徽標旁邊設置較低的糾錯級別, IronQR將引發帶有描述性訊息的異常,而不是產生掃描不可靠的程式碼。

對於ASP.NET Core應用程序, ASP.NET Core二維碼產生器教學課程展示如何從控制器操作提供產生的二維碼作為影像回應。 輸出流直接寫入回應,無需中間檔案 I/O,從而保持高流量端點的低延遲。

如何在ASP.NET Core應用程式中讀取二維碼?

從上傳的影像、文件處理流程或自動偵測系統中掃描伺服器端的二維碼是讀取 API 的常見用例。 ASP.NET二維碼掃描器指南涵蓋了完整的控制器和服務設置,但其核心讀取模式與控制台應用程式相同:

using IronQr;
using IronSoftware.Drawing;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/qr")]
public class QrScanController : ControllerBase
{
    [HttpPost("scan")]
    public IActionResult Scan(IFormFile imageFile)
    {
        using var stream = imageFile.OpenReadStream();
        var bitmap = AnyBitmap.FromStream(stream);
        var imageInput = new QrImageInput(bitmap);
        var reader = new QrReader();
        var results = reader.Read(imageInput);

        var decoded = results.Select(r => new { r.Value, r.Url }).ToList();
        return Ok(decoded);
    }
}
using IronQr;
using IronSoftware.Drawing;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/qr")]
public class QrScanController : ControllerBase
{
    [HttpPost("scan")]
    public IActionResult Scan(IFormFile imageFile)
    {
        using var stream = imageFile.OpenReadStream();
        var bitmap = AnyBitmap.FromStream(stream);
        var imageInput = new QrImageInput(bitmap);
        var reader = new QrReader();
        var results = reader.Read(imageInput);

        var decoded = results.Select(r => new { r.Value, r.Url }).ToList();
        return Ok(decoded);
    }
}
$vbLabelText   $csharpLabel

AnyBitmap.FromStream() 方法接受任何可讀流,因此相同的程式碼路徑適用於透過表單上傳的檔案、從 Blob 儲存中取得的影像或從視訊管道中提取的訊框。控制器不會將任何臨時檔案寫入磁碟,這對於檔案系統可能為唯讀的容器化部署至關重要。

對於高吞吐量場景,請將 QrReader 作為單例在每個應用程式生命週期內實例化一次,因為 ML 模型載入成本是在首次建構時支付的。 對同一實例的後續 Read() 呼叫是線程安全的,並且共享已載入的模型。

如何在.NET MAUI應用程式中產生二維碼?

.NET MAUI QR 碼教學演示了在 iOS、Android、macOS 和 Windows 上的完整跨平台生成過程。 IronQR在非 Windows 平台上運行時使用SkiaSharp渲染後端,從而在所有 MAUI 目標上提供一致的輸出。

using IronQr;
using IronSoftware.Drawing;

// Generate QR and convert to a byte array for display in MAUI
QrCode qr = QrWriter.Write("https://ironsoftware.com/csharp/qr/");
AnyBitmap bitmap = qr.Save();
byte[] imageBytes = bitmap.ExportBytes();

// Bind imageBytes to an <Image Source> in your MAUI page
using IronQr;
using IronSoftware.Drawing;

// Generate QR and convert to a byte array for display in MAUI
QrCode qr = QrWriter.Write("https://ironsoftware.com/csharp/qr/");
AnyBitmap bitmap = qr.Save();
byte[] imageBytes = bitmap.ExportBytes();

// Bind imageBytes to an <Image Source> in your MAUI page
$vbLabelText   $csharpLabel

在移動目標上,ExportBytes() 傳回 PNG 位元組數組,您可以將其直接輸入到 StreamImageSource 或寫入到 ImageButton。 MAUI 鷹架不需要特定於平台的程式碼路徑——相同的生成邏輯在所有四個 MAUI 目標上運行完全相同。

對於.NET項目, API介面是相同的; 只有語法不同。 該庫以單一NuGet套件的形式提供,無需單獨的 VB .NET組件。

下一步計劃是什麼?

IronQR涵蓋了.NET中完整的二維碼生命週期——從基本生成和結構化有效載荷編碼到利用機器學習讀取損壞或品牌化的二維碼。 該庫處理漢字編碼、糾錯配置和跨平台影像輸出,讓您可以專注於應用程式特有的邏輯。

將所學付諸實踐:

常見問題解答

IronQR支持哪些.NET版本?

IronQR支持.NET Core 6、7、8、9和10,以及.NET Framework 4.6.2及更高版本。它還針對.NET Standard 2.0+,使其兼容Xamarin、.NET MAUI、Blazor和ASP.NET Core專案。

如何在C#中從圖片文件中讀取QR代碼?

使用`AnyBitmap.FromFile()`載入圖片,將其傳遞給`QrImageInput`,然後調用`QrReader.Read()`。該方法返回一個`IEnumerable`,其中每個結果包含解碼值、URL和角部坐標。

QR代碼的四種錯誤更正級別是什麼?

四個級別是低(L,約7%恢復)、中(M,約15%)、四分之一(Q,約25%)和高(H,約30%)。更高的級別增加冗餘模塊,減少淨數據容量,但提高損壞或部分遮擋代碼的掃描可靠性。

IronQR能否讀取帶標誌或部分損壞的QR代碼?

是。IronQR的ML增強檢測模型處理部分損壞的代碼、內嵌標誌、運動模糊和低分辨率輸入而不需要手動預處理。

如何在QR代碼中嵌入標誌?

將`Logo`屬性設置在`QrOptions`對象中,將您的標誌圖片設置為`AnyBitmap`,並將錯誤更正級別設置為高。IronQR自動強制此限制,因為居中的標誌大約占據代碼表面的30%。

IronQR是否支持日文和其他Unicode字符?

是。將任何Unicode字符串傳遞給`QrWriter.Write()`,程式庫會自動為日文字符選擇漢字模式,或使用ECI標誌設定其他Unicode內容的字節模式。

如何在ASP.NET Core應用中生成QR代碼?

使用`AnyBitmap.FromStream()`讀取上傳圖片,使用`QrWriter.Write()`生成代碼。將輸出作為MIME類型為`image/png`的`FileContentResult`返回。實例化`QrReader`為單例以攤成本ML模型加載成本。

IronQR是跨平台的嗎?

是。IronQR在非Windows平台上使用SkiaSharp渲染後端,通過.NET MAUI在macOS、Linux、iOS和Android上提供一致的QR生成和讀取。

Jordi Bardia
軟體工程師
Jordi 在 Python、C# 和 C++ 上最得心應手,當他不在 Iron Software 展現技術時,便在做遊戲編程。在分担產品测测试,產品開發和研究的责任時,Jordi 為持续的產品改進增值。他说这种多样化的经验使他受到挑战并保持参与, 而这也是他与 Iron Software 中工作一大乐趣。Jordi 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me