IRONSOFTWAREHOME
USING IRONQR

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

Curtis Chau
Curtis Chau
Updated: 2026年4月21日

在使用 .NET Core 构建 Web 或 Enterprise 应用程序时,对 QR 码的支持(用于库存跟踪、支付流程或双因素认证)往往是常见的需求。 与其将开发周期耗费在低级编码算法上,不如选用能够处理完整工作流的专用库。 IronQR 适用于 .NET 提供完整的 QR 代码解决方案,涵盖从基础生成到基于机器学习的读取以及高级纠错等所有功能。

准备亲自尝试一下了吗? 立即开始免费试用,体验如何快速为您的项目添加QR功能。

NuGet使用 NuGet 安装

PM > Install-Package IronQR

Install IronQR by running the command above in the NuGet Package Manager Console, or search for the package in the NuGet Package Manager.

如何安装QR库?

通过 NuGet 安装 IronQR 只需几秒钟。 打开Visual Studio,转到工具 > NuGet包管理器 > 为解决方案管理NuGet包,搜索IronQR,然后点击 安装。 该软件包依赖项极少,开箱即用,支持 Windows、macOS 和 Linux 系统。

PM > Install-Package IronQR

IronQR 支持 .NET Core 6、7、8、9 和 10,以及 .NET Framework 4.6.2 及更高版本。 对于跨平台项目,SkiaSharp 集成可在非 Windows 运行时环境中处理图像。 该库可与 ASP.NET Core Web 应用程序、控制台应用程序和桌面解决方案配合使用,无需额外的运行时配置。 安装完成后,所有必要的扩展方法和类型均可立即使用。

如何从图片中读取一个基本的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}");
}

输入二维码

QR Code Generator .NET Core: 只需几行代码即可读取和生成二维码:图像1 - 输入二维码

输出

QR Code Generator .NET Core: 只需几行代码即可读取和生成二维码:图像2 - 示例二维码扫描输出

IEnumerable<QrResult>,每个结果都携带解码文本、如果有编码则包含的URL,以及图像中QR符号的空间位置。 该库接受字节数组、文件路径和AnyBitmap对象,为任何项目架构提供灵活性——无论是从磁盘、数据库还是实时摄像头读取。

支撑该读取器的机器学习模型,使 IronQR 区别于纯粹的算法库。 它能够处理运动模糊、部分遮挡和光照不均等现实场景中的缺陷,且无需手动预处理或阈值调整。

如何提取高级QR码数据?

除了基本的值解码外,IronQR 还能从每个扫描的符号中提取坐标、原始数据段以及模块级信息。 这对于文档处理工作流至关重要——在这些场景中,您需要精确定位页面上QR码的位置;对于必须处理单张图片中多个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}");
    }
}

输入 QR.

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

高级 QR 阅读结果

QR Code Generator .NET Core: 只需几行代码即可读取和生成二维码:图像4 - 高级QR数据提取结果

QrResult.Points集合包含检测到的QR符号在像素空间中的四个角坐标。 您的应用程序可利用这些功能在文档图像上叠加边界框、裁剪QR区域以供后续处理,或将位置数据传递给下游系统,由该系统将物理坐标映射到文档的逻辑位置。

IronQR通过相同的ML管道处理包含自定义嵌入徽标、损坏的模块或低分辨率输入的代码。该库不需要单独的预处理步骤——检测和解码在单个Read()调用中进行。

纠错级别如何影响QR码质量?

纠错机制使QR扫描仪即使在部分代码被遮挡、打印质量不佳或物理损坏的情况下,也能恢复原始数据。 QR标准定义了四个等级——低(L)、中(M)、四分位(Q)和高(H)——每个等级都在存储容量与抗损能力之间进行权衡。

级别恢复能力最佳用途
L~7%清晰的数字显示,最高的数据密度
M~15%通用打印应用程序
~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");

输出

QR Code Generator .NET Core: 只需几行代码即可读取和生成二维码:图像5 - 具有高纠错级别的生成二维码

QrOptions构造函数接受纠错级别和最大版本号。 版本 40 的编码可存储多达 7,089 个数字字符,而版本 1 的编码仅能存储 41 个。设置较低的最大版本可限制输出大小,这在需要确保整批产品物理尺寸一致时非常有用。 错误校正级别越高,用于冗余的模块就越多,从而在任何给定版本中都会减少净数据容量。

IronQR 的容错功能与该特性相辅相成——在读取高纠错级别生成的条码时,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");

QR 代码输出

QR Code Generator .NET Core: 只需几行代码即可读取和生成二维码:图像6 - 输出二维码

汉字编码采用每模块两个字节而非八位字节的编码方式,因此相同版本的日语 QR 码所能存储的字符数量远多于等效的 UTF-8 字节模式 QR 码。 对于混合内容(例如 URL 后跟日文文本),IronQR 会将输入内容分割,并以最优模式对每个片段进行编码。 您无需手动指定分段边界或调用编码辅助函数; 编码管道会为您处理此事。

此自动选择功能还涵盖扩展通道解释 (ECI) 标记,这些标记会向扫描仪提示正在使用非标准字符集。 面向国际市场的应用程序可以直接将任何Unicode字符串传递给QrWriter.Write(),无需单独配置。

如何使用有效载荷生成器处理结构化 QR 码数据?

仅编码普通 URL 的 QR 码适用于简单的链接分享,但许多应用需要编码结构化数据——例如 Wi-Fi 凭据、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.");

创建的 QR 代码

QR Code Generator .NET Core: 只需几行代码即可读取和生成二维码:图像7 - 从URL创建的二维码

QrWriter.Write()方法接受普通字符串或结构化负载对象。 对于 Wi-Fi 网络,有效载荷将 SSID、密码和安全类型编码为 Android 和 iOS 扫描器可识别的格式。对于联系信息,输出遵循大多数移动端 QR 阅读器采用的 MeCard 标准。 "生成"功能页面详细记录了所有受支持的负载类型及其必填字段。

该库可输出像素尺寸可配置的图像。 用于实际生产环境时,生成至少 200x200 像素的代码,可确保在典型智能手机扫描距离下实现可靠识别。 较大尺寸适用于扫描距离超过一米的户外或PRINT应用场景。

如何自定义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");

嵌入徽标会减少有效数据区域,因此当提供徽标时,该库需要H级错误校正。 中心区域预留的静区约占代码表面的 30%,该比例在H级别的恢复能力范围内。 该库会自动执行此限制——若在添加徽标时设置了较低的错误纠正级别,IronQR会抛出带有描述性信息的异常,而非生成无法可靠扫描的二维码。

对于 ASP.NET Core 应用程序,.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);
    }
}

AnyBitmap.FromStream()方法接受任何可读流,因此相同的代码路径适用于通过表单上传的文件、从blob存储获取的图像或从视频管道提取的帧。控制器不会将任何临时文件写入磁盘,这对于文件系统可能只读的容器化部署非常重要。

对于高吞吐量场景,每个应用程序生命周期实例化一次QrReader作为单例,因为机器学习模型加载成本在首次构建时支付。 在相同实例上的后续Read()调用是线程安全的,并共享已加载的模型。

如何在 .NET MAUI 应用程序中生成 QR 码?

.NET MAUI QR code 教程演示了在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

在移动目标上,ImageButton。 MAUI 框架无需平台特定的代码路径——相同的生成逻辑在所有四个 MAUI 目标平台上运行效果完全一致。

对于 VB.NET 项目,API 接口完全一致; 仅语法有所不同。 该库提供单个 NuGet 包,无需单独的 VB.NET 程序集。

下一步计划是什么?

IronQR 覆盖了 .NET 环境中完整的 QR 生命周期——从基础生成和结构化负载编码,到利用机器学习技术读取受损或带有品牌标识的 QR 码。 该库负责处理汉字编码、错误校正配置以及跨平台图像输出,让您能够专注于应用程序特有的逻辑。

将所学知识付诸实践:

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

...
阅读更多

相关文章

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
预约您的免费现场演示
Booking Badge

深受全球数百万工程师信赖

Iron Software 的客户徽标
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户