跳至頁尾內容
USING IRONQR

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

在 .NET Core 上建立網路或企業應用程式時,QR碼支援──用於庫存追蹤、支付流程或雙因素身份驗證──是一個常見需求。 與其花時間在低層次的編碼算法上,您可以使用專門的程式庫來處理完整的工作流程。 IronQR提供全面的QR碼解決方案,涵蓋從基本生成到機器學習驅動的讀取和高級錯誤更正等所有功能。

準備好自行試試了嗎? 今天開始您的免費試用,看看您能多快速地為您的專案增加 QR 功能。

NuGet 使用NuGet安裝

PM >  Install-Package IronQR

查看在NuGet上的https://www.nuget.org/packages/IronQR,快速安裝。超過1000萬次下載,正在用C#轉變PDF開發。 您也可以下載DLL

如何安裝QR碼程式庫?

通過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網頁應用程式、控制台應用程式和桌面解決方案一起使用,無需額外的執行時配置。 安裝後,所有必要的擴充方法和型別立即可用。

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

從影像檔中讀取QR碼資料僅需幾行程式碼。 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}");
}
Imports IronQr
Imports IronSoftware.Drawing

' Load image containing QR code
Dim inputBmp = AnyBitmap.FromFile("qr-sample.png")
' Create QrImageInput from the bitmap
Dim imageInput As New QrImageInput(inputBmp)
' Initialize QR Reader with ML model
Dim reader As New QrReader()
' Read and decode all QR codes in the image
Dim results As IEnumerable(Of QrResult) = reader.Read(imageInput)
' Output decoded text strings
For Each qrCode In results
    Console.WriteLine($"QR Code Value: {qrCode.Value}")
    Console.WriteLine($"URL: {qrCode.Url}")
Next
$vbLabelText   $csharpLabel

輸入QR Code

QR Code Generator .NET Core: Read and Generate QR Codes with Just a Few Lines of Code: Image 1 - Input QR Code

輸出

QR Code Generator .NET Core: Read and Generate QR Codes with Just a Few Lines of Code: Image 2 - Example QR Code scan output

IEnumerable<QrResult>,每個結果都包含解碼文字、若有編碼的URL,以及影像中QR符號的空間位置。 該程式庫接受字節陣列、檔案路徑和AnyBitmap物件,使您在專案架構中有靈活性──無論您是從硬碟、資料庫還是動態攝影機鏡頭讀取。

支撐此讀取器的ML模型讓IronQR與純算法程式庫區分開來。 它能處理實際中的不完美狀況,如運動模糊、部分遮擋和不均勻的光線,無需手動預處理或門檻調整。

如何提取高級QR碼資料?

除了基本值解碼,IronQR會暴露每個掃描程式碼的座標、原始資料片段和模塊級別資訊。 這對於您需要確切知道某個QR碼在文件上出現位置的文件處理工作流程非常重要,或者對於必須處理一個影像中的多個程式碼的應用程式來說也極為必要。

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}");
    }
}
Imports IronQr
Imports IronSoftware.Drawing

Dim inputBmp = AnyBitmap.FromFile("document-with-qr.png")
Dim imageInput As New QrImageInput(inputBmp)
Dim reader As New QrReader()
Dim results As IEnumerable(Of QrResult) = reader.Read(imageInput)

For Each qrCode In results
    ' Access decoded value
    Console.WriteLine($"Data: {qrCode.Value}")
    ' Get corner coordinate positions
    For Each point As PointF In qrCode.Points
        Console.WriteLine($"Position: {point.X}, {point.Y}")
    Next
Next
$vbLabelText   $csharpLabel

輸入QR

QR Code Generator .NET Core: Read and Generate QR Codes with Just a Few Lines of Code: Image 3 - Input QR code

高級QR讀取結果

QR Code Generator .NET Core: Read and Generate QR Codes with Just a Few Lines of Code: Image 4 - Results for advanced QR data extraction

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

IronQR通過相同的ML管道處理包含自定義嵌入標誌、損壞的模塊或低解析度輸入的程式碼。程式庫不需要單獨的預處理步驟——檢測和解碼在單一Read()調用中完成。

錯誤更正級別如何影響QR碼質量?

錯誤更正是QR掃描器即使在部分程式碼被遮擋、印刷不良或物理損壞時也能恢復原始資料的機制。 QR碼標準定義了四個級別——低 (L)、中 (M)、準四型 (Q) 和高 (H)——每個級別以儲存容量來換取耐損特性。

級別 恢復能力 最佳用途
L ~7% 乾淨的數位顯示,最大資料密度
M ~15% 一般印刷應用
Q ~25% 工業標籤,預期中度磨損
H ~30% 嵌入標誌,戶外或高磨損表面

在生成QR碼時,指定更高的錯誤更正級別可以確保輸出在實際掃描條件下能夠良好運行:

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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

輸出

QR Code Generator .NET Core: Read and Generate QR Codes with Just a Few Lines of Code: Image 5 - Generated QR Code with high error correction level

QrOptions構造函式接受錯誤更正級別和最大版本號。 版本40的程式碼最多儲存7,089個數字字元,而版本1的程式碼僅容納41個。設置較低的最大版本可以限制輸出尺寸,這在您需要在一批中保持一致的物理尺寸時很有用。 錯誤更正級別越高,為冗餘保留的模組越多,因而在任何給定版本下可用的淨資料容量會減少。

IronQR的容錯功能與此屬性一起閱讀——在高級別錯誤更正下生成的程式碼時,程式庫能從純算法解碼器完全失敗的程式碼中恢復資料。

如何生成具有國際字元的QR碼?

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");
Imports IronQr
Imports IronSoftware.Drawing

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

QR碼輸出

QR Code Generator .NET Core: Read and Generate QR Codes with Just a Few Lines of Code: Image 6 - Output QR Code

日文字編碼每個模組存放兩個字節而不是八個位,因此同一版本的日文QR碼比UTF-8字節模式等效物儲存更多字元。 對於混合內容,例如一個URL後接日文字,IronQR切分輸入並以最優模式編碼每個段。 您不需要指定段邊界或手動調用編碼輔助器; 編碼管道為您處理這些。

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

如何使用有效荷載發電器生成結構化QR資料?

一個QR碼編碼單一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.");
Imports IronQr
Imports IronSoftware.Drawing

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

已建立的QR碼

QR Code Generator .NET Core: Read and Generate QR Codes with Just a Few Lines of Code: Image 7 - QR Code created from an URL

QrWriter.Write()方法接受純字串或結構化有效載荷物件。 對於WiFi網路,該有效載荷按照Android和iOS掃描器認可的格式編碼SSID、密碼和安全型別。對於聯絡資訊,輸出遵循大多數移動QR讀取器使用的MeCard標準。 生成功能頁面記錄了所有支援的有效載荷型別及其所需欄位。

程式庫以可配置的像素尺寸輸出影像。 對於生產用途,生成至少200x200像素的程式碼可確保從典型智能手機距離可靠掃描。 更大尺寸可有利於戶外或印刷應用,用於超過一米的掃描距離。

如何自訂QR碼外觀?

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");
Imports IronQr
Imports IronSoftware.Drawing

' Define custom colors for the QR code
Dim darkColor As Color = Color.FromArgb(30, 30, 120) ' Deep navy foreground
Dim lightColor As Color = Color.White

Dim options As New QrOptions(QrErrorCorrectionLevel.High, maxVersion:=20) With {
    .BackgroundColor = lightColor,
    .Color = darkColor,
    ' Embed a logo image into the QR center
    .Logo = AnyBitmap.FromFile("logo.png")
}

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

嵌入標識減少了有效資料區域,因此程式庫要求當提供了標識時使用高(H)錯誤更正級別。 中心保留的安靜區域約佔程式碼表面30%,這在H級別的恢復能力之內。 程式庫自動強制執行此約束——如果您設置了低於標識可選擇的錯誤更正級別,IronQR會報錯並提供描述性訊息,而非生成掃描不可靠的程式碼。

對於ASP.NET Core應用程式,ASP.NET Core QR碼產生器教學展示了如何從控制器動作中將生成的QR碼作為影像響應提供。 輸出流直接寫入響應而無需中介文件I/O,這對於高流量端點保持延遲低非常重要。

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

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

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);
    }
}
Imports IronQr
Imports IronSoftware.Drawing
Imports Microsoft.AspNetCore.Mvc

<ApiController>
<Route("api/qr")>
Public Class QrScanController
    Inherits ControllerBase

    <HttpPost("scan")>
    Public Function Scan(imageFile As IFormFile) As IActionResult
        Using stream = imageFile.OpenReadStream()
            Dim bitmap = AnyBitmap.FromStream(stream)
            Dim imageInput = New QrImageInput(bitmap)
            Dim reader = New QrReader()
            Dim results = reader.Read(imageInput)

            Dim decoded = results.Select(Function(r) New With {Key .Value = r.Value, Key .Url = r.Url}).ToList()
            Return Ok(decoded)
        End Using
    End Function
End Class
$vbLabelText   $csharpLabel

AnyBitmap.FromStream()方法接受任何可讀取流,因此同一個程式碼路徑對通過表單上傳的文件、從blob儲存中提取的影像或從影片管道中提取的幀都有效。控制器不會向硬碟寫入任何臨時文件,這對於文件系統可能為只讀的容器化部署尤其重要。

對於高吞吐量的場景,在應用程式生命周期中僅需實例化QrReader一次作為單例,因為ML模型載入成本是在首次構建時支付的。 同一實例上的隨後Read()調用是安全且共享載入模型的。

如何在.NET MAUI應用程式中生成QR碼?

.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
Imports IronQr
Imports IronSoftware.Drawing

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

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

在移動裝置上ImageButton。 MAUI框架不需要平台特定的程式碼路徑——同一生成邏輯在所有四個MAUI目標上運行皆相同。

對於VB.NET專案,API介面是相同的; 只有語法不同。 該程式庫提供單一NuGet封裝,無需額外的VB.NET組件。

您的下一步是什麼?

IronQR涵蓋了.NET中的完整QR碼生命周期——從基本生成和結構化有效載荷編碼到損壞或品牌程式碼的機器學習驅動的讀取。 這個程式庫處理日文字編碼、錯誤更正配置和跨平台影像輸出,讓您專注於特定應用的邏輯。

要將您學到的知識付諸實踐:

常見問題

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 Code?

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

四種QR Code糾錯等級是什麼?

四個等級是低(L,約7%恢復)、中(M,約15%)、四分位(Q,約25%)和高(H,約30%)。較高等級增加冗餘模組,減少淨資料容量,但提高對損壞或部分遮蔽程式碼的掃描可靠性。

IronQR能讀取包含徽標或部分損壞的QR Code嗎?

能。IronQR中的機器學習支持的檢測模型處理部分損壞的程式碼、嵌入的徽標、運動模糊和低解析度輸入,無需手動預處理。

如何使用IronQR將徽標嵌入QR Code中?

在`QrOptions`物件上設定`Logo`屬性為您的徽標圖像的`AnyBitmap`,並將糾錯等級設為高。IronQR會自動施行此限制,因為置中的徽標大約佔據程式碼表面30%。

IronQR支持日文和其他Unicode字元嗎?

能。將任何Unicode字串傳遞給`QrWriter.Write()`,圖書館會自動選擇日文字元的漢字模式或其他Unicode內容的字節模式與ECI標記。

您如何在ASP.NET Core應用程式中生成QR碼?

使用`AnyBitmap.FromStream()`讀取上傳圖像,使用`QrWriter.Write()`生成程式碼。將輸出以MIME型別`image/png`作為`FileContentResult`返回。將`QrReader`實例化為單例以平均化機器學習模型載入成本。

IronQR是否跨平台?

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

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話