完整披露:我们是 Iron Software 的开发者关系团队,Iron Software 是 IronQR 的开发者,IronQR 是本次比较中的一个库。话虽如此,我们相信诚实的评估比市场宣传更能服务于所有人。我们将展示我们的方法论,承认我们的偏见,并让代码自行说明。 我们对每个 C# QR 码库都运行了相同的评估标准:简单的 QR 生成、从图像读取 QR、自定义深度、跨平台支持和许可成本。以下是 .NET 生态系统中 11 个值得关注的 QR 码库的比较结果,旨在帮助您一次性为您的项目选择合适的库。 以下是在 Visual Studio 中使用 进行 QR 生成的三行代码示例,IronQR 是我们将要介绍的库之一: IronQR using IronQr; using IronSoftware.Drawing; QrCode qr = QrWriter.Write("https://example.com"); AnyBitmap bitmap = qr.Save(); bitmap.SaveAs("myqr.png"); IronQR 示例 QR 码输出 这种简单性是基本要求。真正的问题在于,当您需要从仓库扫描仪 损坏的 QR 码、嵌入品牌徽标、定位 Linux 容器或处理数千个代码的批处理作业时,会发生什么。这正是库开始分化的地方,也是本次比较的价值所在。 读取 概要:主比较表 在我们深入之前,先看全貌。此表捕捉了在为 .NET 项目选择 QR 库时最重要的维度。 库 生成 读取 徽标/样式 微型 QR 跨平台 许可 NuGet 下载量 IronQR ✅ ✅ ML 驱动 ✅ 完全支持 ✅ + RMQR ✅ Win/Mac/Linux/Mobile 商业版($749+) 约 56K QRCoder ✅ ❌ ✅ 中等 ✅ ⚠️ 部分(System.Drawing) MIT(免费) 约 6800 万 ZXing.Net ✅ ✅ ❌ 极少 ❌ ⚠️ 通过绑定 Apache 2.0(免费) 约 3200 万 Net.Codecrete.QrCodeGenerator ✅ ❌ ❌ ❌ ✅ MIT(免费) 约 410 万 SkiaSharp.QrCode ✅ ❌ ✅ 自定义形状 ❌ ✅ MIT(免费) 约 120 万 Aspose.BarCode ✅ ✅ ✅ ✅ ✅ 商业版($999+) 约 540 万 Syncfusion Barcode ✅ ❌ ✅ 中等 ❌ ✅(UI 控件) 商业版(社区版免费) 约 200 万+ Spire.Barcode ✅ ✅ ✅ 嵌入徽标 ❌ ⚠️ (System.Drawing) 商业版($599+) 约 45 万 IronBarcode ✅ ✅ ✅ ✅ 微型 QR ✅ Win/Mac/Linux 商业版($749+) 约 120 万 Dynamsoft Barcode Reader ❌ ✅ 高性能 不适用 ✅ ✅ 商业版($1,249+/年) 约 25 万 BarcodeLib ✅ ❌ ❌ ❌ ⚠️ (System.Drawing) Apache 2.0(免费) 约 450 万 表 1:11 个 .NET QR 码库在关键选择标准下的主比较。下载次数截至 2026 年初,为近似值。 本文其余部分将详细介绍每一行,并附有代码、权衡和诚实的评估。 我们是如何评估这些库的? 我们根据七个标准评估了每个库,这些标准根据它们在现实世界选择决策中驱动的频率进行加权: — 能否从字符串、URL 和结构化数据(vCards、Wi-Fi 凭据)创建 QR 码? QR 生成 — 能否从图像、扫描或 PDF 解码 QR 码?它如何处理损坏或旋转的代码? QR 读取 — 徽标嵌入、颜色控制、模块形状样式、纠错配置 自定义 — 标准 QR、微型 QR、RMQR(矩形微型 QR) QR 格式支持 — 它是否能在 Windows、Linux、macOS 和 Docker 容器中干净地运行,而无需 System.Drawing 的 hack? 跨平台 — 开源 vs 商业版、按开发者定价、套件折扣 许可与成本 — API 参考质量、教程可用性、社区规模、活跃维护 文档与生态系统 所有代码示例都以 为目标,并使用顶层语句。当 .NET 10 引入相关改进时,我们会加以说明。 .NET 8 (LTS) 选择哪个 QR 库?决策框架 如果您已经知道自己的限制,请跳过下面的 11 个库配置文件。这是快速路径: → 或 。两者都获得 MIT 许可。QRCoder 提供了更多的渲染器和有效载荷助手;Net.Codecrete 更轻量级,并且完全避免了 System.Drawing。 “我需要免费生成 QR 码,且没有任何依赖项。” QRCoder Net.Codecrete.QrCodeGenerator → (ML 驱动的读取,对损坏代码的准确性最佳)、 (免费、久经考验、最广泛的格式支持)或 (企业级套件,昂贵)。 “我需要同时生成和读取 QR 码。” IronQR ZXing.Net Aspose.BarCode → 、 或 。这三个库都避免了破坏跨平台部署的 System.Drawing 依赖项。 “我正在部署到 Linux/Docker,无法使用 System.Drawing。” IronQR SkiaSharp.QrCode Net.Codecrete.QrCodeGenerator → 在原始生成基准测试中处于领先地位。对于读取性能, 专为高吞吐量扫描而设计。 “性能和内存占用至关重要。” SkiaSharp.QrCode Dynamsoft Barcode Reader → 使用您现有的。从许可或维护的角度来看,当您的套件已包含某个供应商的 QR 库时,再添加另一个供应商的库很少有意义。 “我已经在使用 Aspose/Syncfusion/Iron Software 套件。” → 提供了明确的 MAUI 和 Blazor 集成指南。Microsoft MVP Jeff Fritz ,这是完全相同的模式的一个实际示例。 “我正在构建一个带有 QR 扫描功能的 Blazor/MAUI 移动应用程序。” IronQR 使用 IronQR 和 Blazor 构建了一个基于 QR 的数字名片应用程序 11 个 .NET QR 码库比较 1. IronQR — ML 驱动的 QR 读取和生成,支持跨平台 IronQR 是 Iron Software 专用的 QR 码库,独立于其更广泛的 IronBarcode 产品。其突出特点是基于机器学习模型( )的,它能检测和读取不完美图像中的 QR 码,即使图像有旋转、部分遮挡或以奇怪的角度拍摄,通常只需几行代码即可完成。 ONNX 它还能轻松创建 QR 码对象,支持使用图像样式化 QR 码、添加自定义颜色以及将 QR 图像保存为不同的输出格式。 生成: using IronQr; using IronSoftware.Drawing; // 生成带徽标的样式化 QR 码 var options = new QrOptions(QrErrorCorrectionLevel.High, 20); QrCode qr = QrWriter.Write("https://example.com", options); var style = new QrStyleOptions { Dimensions = 300, Margins = 10, Color = new Color("#2E75B6"), Logo = new QrLogo { Bitmap = AnyBitmap.FromFile("logo.png"), Width = 80, Height = 80 } }; AnyBitmap styledQr = qr.Save(style); styledQr.SaveAs("branded-qr.png"); IronQR 生成的 QR 输出 读取: using IronQr; using IronSoftware.Drawing; var reader = new QrReader(); var input = new QrImageInput(AnyBitmap.FromFile("scanned-qr.jpg")); IEnumerable<QrResult> results = reader.Read(input); foreach (var result in results) Console.WriteLine($"Value: {result.Value}"); IronQR 读取输出 ML 模型是 IronQR 与此列表中的其他库区分开来的关键。在我们的测试中,它成功解码了来自会议徽章照片和角度手机截图的 QR 码,而 ZXing.Net 和基本图像处理读取器则一无所获。缺点是包的大小,ONNX 模型增加了体积。如果您只需要生成功能,IronQR.Slim 不带 ML 模型,体积更小。 优点: ML 驱动的读取功能可处理损坏、旋转和部分遮挡的 QR 码,并优先考虑准确性 支持 QR Code、Micro QR 和 RMQR(矩形 Micro QR)格式 完整的样式 API:颜色、徽标、圆角模块、边距 跨平台:Windows、macOS、Linux、iOS、Android、Docker、Azure、AWS 异步读取支持(ReadAsync)适用于服务器工作负载 可保存为多种格式,如 PNG 图像、JPG、多页 TIFF 等 用户友好的 API 使其易于使用 缺点: 需要商业许可(部署时每位开发者 $749+) 由于 ML 模型,完整包比开源替代品更大 低于成熟的开源选项,是较新产品(约 2023 年发布) NuGet 下载量 仅用于生成的项目可能不需要 ML 开销 需要同时生成和读取 QR 码的项目,尤其是在扫描条件不理想的情况下(移动应用、仓库扫描、会议/活动场景)。 展示了 IronQR 如何使用 Blazor 处理实时 QR 生成和自定义品牌。 最适合: Jeff Fritz 的 QR 名片案例研究 2. — 最受欢迎的开源 QR 生成器 QRCoder QRCoder 库是 NuGet 上下载量最大的 QR 码包, 。最初由 Raffael Herrmann 于 2013 年创建,现在由 ,它是一个纯 C# 实现,专注于 QR 码 (不读取)。 下载量超过 6800 万次 Shane32 维护 生成 using QRCoder; // 生成 QR 码并保存为 PNG 字节 using var qrGenerator = new QRCodeGenerator(); using var qrCodeData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.H); using var pngQrCode = new PngByteQRCode(qrCodeData); byte[] qrCodeImage = pngQrCode.GetGraphic(20); File.WriteAllBytes("qrcoder-output.png", qrCodeImage); QRCoder 输出图像 QRCoder 提供了多种渲染器:PngByteQRCode(跨平台,无 System.Drawing 依赖)、QRCode(基于 System.Drawing,仅限 Windows)、SvgQRCode、AsciiQRCode 等。它还包含结构化数据(如 Wi-Fi 凭据、vCards 和书签)的有效载荷生成器,这可以节省您手动格式化这些字符串的麻烦。 优点: MIT 许可,完全免费用于商业用途 6800 万+ 次 NuGet 下载,庞大的社区采用和成熟的稳定性 多种渲染器选项,包括避免 System.Drawing 的 PngByteQRCode 内置有效载荷生成器(Wi-Fi、vCard、地理位置、日历事件) 微型 QR 码支持 对 .NET Standard 目标没有依赖项 缺点: ,无法读取或解码 QR 码图像文件 仅生成 某些渲染器(如 QRCode)依赖于 System.Drawing.Common,自 .NET 6 起仅限于 Windows 没有内置的徽标嵌入(您需要自己组合图像) 没有高级样式(模块形状、渐变) 只需要 QR 生成的项目,尤其是在预算为零的情况下。如果您需要生成 Wi-Fi QR 码或 vCards 但根本不需要读取代码,QRCoder 是大多数 .NET 开发人员的实用默认选择。 最适合: 3. — 条形码库中的瑞士军刀 ZXing.Net (“斑马线”)是原始 Java ZXing 库的 。它是一个通用的条形码库,支持超过 15 种格式,包括 QR Code、Data Matrix、Aztec、PDF 417、UPC、EAN、Code 128 等。QR 支持是其更广泛功能的一个子集。 ZXing.Net .NET 端口 using ZXing; using ZXing.Common; using ZXing.QrCode; // 生成 QR 码 var writer = new BarcodeWriterPixelData { Format = BarcodeFormat.QR_CODE, Options = new QrCodeEncodingOptions { Height = 250, Width = 250, Margin = 1 } }; var pixelData = writer.Write("https://example.com"); // 读取 QR 码需要绑定包(例如 ZXing.Net.Bindings.SkiaSharp) ZXing.Net 输出 ZXing.Net 需要特定平台的绑定包来进行渲染和读取。核心包提供编码/解码逻辑;您根据目标平台添加 ZXing.Net.Bindings.Windows.Compatibility、ZXing.Net.Bindings.SkiaSharp 或 ZXing.Net.Bindings.ImageSharp。这种模块化方法很灵活,但增加了集成复杂性。 优点: Apache 2.0 许可,免费用于商业用途 单个库中同时支持生成和读取 支持 QR 码之外的 15 种以上条形码格式 ,久经考验,社区知识丰富 3200 万+ 次 NuGet 下载 提供 SkiaSharp、ImageSharp、OpenCV 等的绑定 缺点: QR 特定功能基本,不支持徽标嵌入,不支持高级样式 与 ML 驱动的解决方案相比,读取损坏/旋转 QR 码的准确性一般 绑定包增加了依赖管理复杂性 API 设计显得陈旧,不如现代 .NET 库流畅 活跃维护速度放缓(社区维护) 需要 QR 码和传统条形码支持(零售、物流)并希望获得免费、经过验证选项的项目。如果您的首要任务是 QR 特定功能(如样式或 ML 驱动的读取),而不是广泛的条形码格式覆盖,那么专用的 QR 库将更好地为您服务。 最适合: 4. Net.Codecrete.QrCodeGenerator — 轻量级且专注于标准 Net.Codecrete.QrCodeGenerator 是 Manuel Bleichenbacher 创建的一个干净、最小化的 QR 码生成库。它是 ,专注于正确性和标准合规性( )。 Project Nayuki 的 Java QR 码生成器的 .NET 翻译 ISO/IEC 18004 using Net.Codecrete.QrCodeGenerator; var qr = QrCode.EncodeText("https://example.com", QrCode.Ecc.Medium); string svg = qr.ToSvgString(4); File.WriteAllText("output.svg", svg); Net.Codecrete.QrCodeGenerator 示例输出 凭借 ,对于一个专注的库来说,它已被广泛采用。其突出的优点是完全没有 System.Drawing 依赖项 — 它本地生成 SVG、XAML 路径数据、PNG 和 BMP。这使其成为跨平台 .NET 项目和在 Docker 中运行的 ASP.NET Core 服务的绝佳选择。 约 410 万次 NuGet 下载 优点: MIT 许可,完全免费 零 System.Drawing 依赖,真正跨平台 体积小,生成速度快 内置 SVG 和 XAML 输出(适用于 WPF、WinUI 和 Web 场景) 所有 40 个 QR 版本和所有 4 个纠错级别的正确实现 广泛的示例项目(WinForms、WPF、ASP.NET Core、SkiaSharp、ImageSharp) 缺点: ,没有 QR 读取功能 仅生成 没有徽标嵌入或高级样式功能 与 QRCoder 的有效载荷生成器相比,自定义功能有限 与 QRCoder 或 ZXing.Net 相比,社区内容和教程较少 需要一个小型、正确、跨平台的 QR 生成器,具有 SVG 输出且没有 System.Drawing 负担的开发人员。如果您的部署目标是 Linux 或 Docker,并且您只需要生成功能,那么这个库值得认真考虑。 最适合: 5. SkiaSharp.QrCode — 高性能跨平台生成 SkiaSharp.QrCode 由 开发,是基于 SkiaSharp 的面向性能的 QR 生成库。它专门创建,以避免 System.Drawing 的 GDI+ 限制,同时通过 SkiaSharp 的硬件加速提供本机级性能。 guitarrapc using SkiaSharp.QrCode.Image; // 单行代码:生成并保存 QRCodeImageBuilder.SavePng("https://example.com", "qrcode.png"); // 或带自定义设置 var pngBytes = new QRCodeImageBuilder("https://example.com") .WithSize(512, 512) .WithErrorCorrection(ECCLevel.H) .ToByteArray(); SkiaSharp.QrCode 单行代码输出 该项目的存储库中的基准测试结果显示,在生成任务的速度和内存分配方面,SkiaSharp.QrCode 的性能优于 QRCoder 和其他 .NET QR 库。它实现了直接到 SkiaSharp 画布的零拷贝渲染,避免了中间缓冲区分配。 优点: MIT 许可,免费用于商业用途 一流的生成性能(经基准测试) 最小的内存分配,高吞吐量场景下的低 GC 压力 NativeAOT 就绪(.NET Native AOT 编译支持) 自定义模块形状(圆形、圆角矩形),用于样式化 QR 码 适用于 Windows、Linux、macOS、iOS、Android、WebAssembly 缺点: ,没有 QR 读取功能 仅生成 需要 SkiaSharp 原生依赖项(特定平台的 NuGet 包) 社区规模小于 QRCoder 或 ZXing.Net 没有有效载荷生成器(Wi-Fi、vCard),您需要自己格式化这些字符串 仅支持 UTF-8,不支持 ISO-8859-2 或 Shift JIS 编码 需要大规模生成 QR 码的高吞吐量服务器应用程序(例如,票务系统、批量标签生成),其中性能和内存效率最为重要。如果您已在项目中使用 SkiaSharp,它也是理想选择。 最适合: 6. Aspose.BarCode — 用于生成 QR 码的企业级条形码套件 是一个全面的商业库,支持超过 80 种条形码符号,包括 QR Code、Micro QR、Data Matrix、PDF417 和所有常见的一维格式。它是企业用于文档处理的更广泛的 Aspose 生态系统的一部分。 Aspose.BarCode for .NET using Aspose.BarCode.Generation; using Aspose.BarCode.BarCodeRecognition; // 生成 var generator = new BarcodeGenerator(EncodeTypes.QR, "https://example.com"); generator.Parameters.Barcode.XDimension.Pixels = 4; generator.Save("aspose-qr.png", BarCodeImageFormat.Png); // 读取 using var reader = new BarCodeReader("aspose-qr.png", DecodeType.QR); foreach (var result in reader.ReadBarCodes()) Console.WriteLine($"Type: {result.CodeTypeName}, Text: {result.CodeText}"); Aspose.BarCode QR 输出 Aspose.BarCode 读取输出 Aspose.BarCode 提供 QualitySettings 预设,可在识别速度和对损坏代码的容忍度之间取得平衡,从 HighPerformance(快速,干净的图像)到 HighQuality(较慢,可处理噪点和失真)。 优点: 同时支持生成和读取,具有复杂的质量调整功能 支持 80 多种条形码格式,是列表中最广泛的 高级读取功能可处理嘈杂的扫描、低对比度、倾斜和损坏的代码 丰富的自定义功能:颜色、边框、条形高度、旋转、文本位置 跨平台:.NET Framework、.NET Core、.NET 5+、Xamarin 全面的文档和 API 参考 缺点: ,永久许可证起价为每位开发者 999 美元 昂贵 包体积大,反映了格式支持的广泛性 如果您只需要 QR 码,则过于复杂,您要为 80 多种您不会使用的格式付费 API 设计比专用 QR 库更冗长 封闭式生态系统,与其他 Aspose 产品集成效果最佳 已经投资于 Aspose 生态系统的企业,或需要支持 QR 码以外多种条形码格式的项目。对于仅限 QR 的项目,性价比很难证明。 最适合: 7. Syncfusion Barcode — 带有 QR 功能的 UI 控件 Syncfusion 的 Barcode 组件是一个 UI 控件,在他们的 ASP.NET Core、Blazor、WPF、WinForms 和 Xamarin 平台上均可用。与独立库不同,它旨在直接在 Syncfusion 的 UI 框架内渲染条形码和 QR 码。 Syncfusion 提供