跳至页脚内容
使用 IRONQR

QR Code .NET Core:使用 C# 读取和生成二维码

在.NET Core上构建 Web 或企业应用程序时,对二维码的支持(用于库存跟踪、支付流程或双因素身份验证)是一个常见的需求。 与其将开发周期浪费在底层编码算法上,不如使用一个能够处理整个工作流程的专用库。 IronQR为.NET提供完整的二维码解决方案,涵盖从基本生成到机器学习驱动的读取和高级纠错等所有功能。

准备好亲自尝试一下了吗? 立即开始免费试用,看看您能多快地将二维码功能添加到您的项目中。

NuGet 使用 NuGet 安装

PM >  Install-Package IronQR

IronQR 上查看 NuGet 快速安装。超过 1000 万次下载,它正以 C# 改变 PDF 开发。 您也可以下载 DLL

如何安装二维码库?

通过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 集成可以处理非 W​​indows 运行时上的图像处理。 该库无需额外的运行时配置即可与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

输入 QR.

. .NET Core二维码生成器:只需几行代码即可读取和生成二维码:图片 3 - 输入二维码

高级 QR 阅读结果

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

创建的 QR 代码

. .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#中读取图像文件中的二维码?

使用 `AnyBitmap.FromFile()` 加载图像,将其传递给 `QrImageInput`,然后调用 `QrReader.Read()`。该方法返回一个 `IEnumerable` 对象。其中每个结果包含解码值、URL 和角点坐标。

二维码纠错级别有哪四个?

四个等级分别为低(L,约7%恢复率)、中(M,约15%)、四分位(Q,约25%)和高(H,约30%)。更高的等级会增加冗余模块,虽然会降低净数据容量,但能提高对损坏或部分遮蔽条码的扫描可靠性。

IronQR能否读取带有标志或部分损坏的二维码?

是的。IronQR 中基于机器学习的检测模型可以处理部分损坏的二维码、嵌入式徽标、IronQR模糊和低分辨率输入,无需手动预处理。

如何使用IronQR将徽标嵌入二维码中?

将 `QrOptions` 对象的 `Logo` 属性设置为您的徽标图像的 `AnyBitmap` 类型,并将纠错级别设置为“高”。IronQRIronQR自动强制执行此约束,因为居中的徽标大约会占用 30% 的代码空间。

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

是的。将任何 Unicode 字符串传递给 `QrWriter.Write()`,该库会自动选择 Kanji 模式来写入日文字符,或选择带有 ECI 标记的字节模式来写入其他 Unicode 内容。

如何在ASP.NET Core应用程序中生成二维码?

使用 `AnyBitmap.FromStream()` 读取上传的图像,并使用 `QrWriter.Write()` 生成二维码。将输出作为 MIME 类型为 `image/png` 的 `FileContentResult` 返回。将 `QrReader` 实例化为单例,以分摊机器学习模型加载成本。

IronQR是否支持跨平台?

是的。IronQR 在非 Windows 平台上使用IronQR渲染后端,通过.NET MAUI在 macOS、Linux、iOS 和 Android 上提供一致的二维码生成和读取。

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