Barkoder SDK 与 IronBarcode:C# 条码库对比
Barkoder SDK 几乎出现在所有"2026 年最佳条码 SDK"的评选中,与 ZXing、Dynamsoft、Scandit 和IronBarcode一起列入比较矩阵。 开发人员在评估.NET项目的条形码解决方案时,会在研究初期就遇到它——他们了解到 MatrixSight、DeBlur 模式、多条形码检测和 DPM 支持,并发现它确实很有吸引力。 然后他们搜索NuGet。 零结果。 条形码 SDK 没有.NET包,没有 C# API,也没有官方的.NET项目路径。 这项比较解释了 Barkoder 究竟是什么,它在其原生领域有哪些优势,以及IronBarcode如何满足.NET开发人员的相同需求。
了解 Barkoder SDK
Barkoder 是一款基于 C/C++ 处理核心的商业条形码扫描 SDK,并封装了适用于 iOS 和 Android 的原生 SDK。 它面向需要实时摄像头扫描的移动开发人员——这种扫描方式类似于仓库工人用手机进行的扫描,或者现场技术人员用平板电脑进行的扫描。 该分销模型完全体现了这一目标。
该 SDK 通过 CocoaPods 分发给 iOS 用户,提供 Swift 和 Objective-C API;通过Maven发给 Android 用户,提供 Kotlin 和 Java API;并通过官方插件分发给混合移动用户,支持 React Native、Flutter、Cordova 和 Capacitor。 没有NuGet包。 没有 C# 绑定。 没有受支持的进入.NET项目的路径。
该公司提供由社区维护的 Xamarin 和 MAUI 绑定项目,但这些并非官方产品,Barkoder 不提供生产支持,也不会与主 SDK 同步更新。 在生产环境的.NET应用程序中,依赖社区绑定来实现关键的条形码工作流程会带来重大的技术风险。 对于任何严肃的.NET部署而言,它们都不是现实的选择。
Barkoder SDK 的主要架构特点:
-移动优先架构:专为 iOS 和 Android 相机管道设计; 所有处理均在设备端通过 C/C++ 内核完成。 -没有.NET SDK:没有NuGet包; 在NuGet上搜索"barkoder"返回零结果 -不支持条形码生成: Barkoder 是一个只读 SDK; 它不具备生成或编码条形码的功能。 -不支持PDF处理:该SDK不支持从PDF文档中读取条形码、从文件系统中读取图像或进行服务器端文档工作流程。 -不支持服务器部署:该 SDK 无法在ASP.NET Core、Azure Functions、Docker 容器或任何服务器端.NET执行环境中运行。 -仅限社区使用的.NET绑定: MAUI 绑定项目处于实验阶段,仅公开 SDK 的一个子集,且不提供生产环境支持。
巴科德建筑的外观
SDK 的 C/C++ 核心负责处理图像处理。 iOS 和 Android 封装器通过平台原生 API 公开了该核心功能。以下两项均不在 .NET 环境中运行——任何 C# 项目中都不存在 using Barkoder; 语句:
// iOS — Swift only, no C# equivalent
let barkoderView = BarkoderView(frame: frame)
barkoderView.config = BarkoderConfig(licenseKey: "LICENSE_KEY") { config in
config.decoder.decoderType = .code128
config.decoder.deblurEnabled = true
}
barkoderView.startScanning { result in
print(result.textualData ?? "No result")
}
// Android — Kotlin only, no C# equivalent
val barkoderView = BarkoderView(context)
barkoderView.config = BarkoderConfig("LICENSE_KEY")
barkoderView.config.decoder.decoderType = DecoderType.Code128
barkoderView.config.decoder.deblurEnabled = true
barkoderView.startScanning { result ->
println(result.textualData)
}
在彻底放弃 Barkoder 之前,值得肯定它有哪些优点。 它之所以能在评测中占有一席之地,是因为它具备真正的实力。 MatrixSight 和 DeBlur Mode提供专有的损坏恢复技术,可以读取物理损坏、印刷质量差或在光线不足的情况下拍摄的条形码。 多条形码检测功能可同时解码单个摄像头画面中的多个条形码,使仓库工人能够一次扫描整个货架。 DPM(直接零件标记)扫描支持 DataMatrix 和其他格式,包括激光蚀刻和点阵喷丸配置,而大多数通用库都无法很好地处理这些配置。 高密度格式支持包括 PDF417、Aztec 和其他 2D 格式,在移动相机上具有很高的精度。
了解IronBarcode
IronBarcode是一个原生.NET库,涵盖了所有.NET环境下的完整条形码工作流程——读取和生成。 它在功能上等同于 Barkoder 在.NET平台上的功能,并增加了一些仅在服务器和桌面环境中才有意义的附加功能。
IronBarcode通过NuGet安装,并完全在本地运行。 条形码操作期间不会进行任何网络呼叫。 它可在物理隔离环境、Azure Functions、Docker 容器、AWS Lambda 以及从.NET Framework 4.6.2 到.NET 9 的所有.NET运行时环境中运行。静态 API 模型意味着无需管理扫描器实例,无需跟踪生命周期,也无需担心并发调用带来的线程安全问题。
IronBarcode的主要特点:
-全面支持.NET :支持.NET Framework 4.6.2+、. .NET 6、7、8 和 9; 可在 Windows、Linux、macOS、Docker、Azure 和 AWS 上运行
-读取和生成:支持从文件、流和 PDF 中读取条形码,并支持 50 多种格式的条形码生成。
-静态 API 设计: BarcodeReader.Read() 和 BarcodeWriter.CreateBarcode() 是静态调用,无需管理任何有状态实例。
-基于机器学习的错误纠正:基于机器学习的图像预处理流程可处理损坏、劣化和低质量的条形码
-原生 PDF 支持:直接从 PDF 文档读取条形码,无需中间图像提取
-完全集成.NET生态系统:兼容ASP.NET Core依赖注入、async/await、中间件和托管模式
功能对比
下表列出了 条形码 SDK 和IronBarcode之间的根本区别:
| 特征 | 条形码 SDK | IronBarcode |
|---|---|---|
| .NET / C# 支持 | 无 | 完整版 — 所有.NET运行时 |
| NuGet软件包 | 无 | 是的 — IronBarcode |
| 条形码读取 | 是的——手机摄像头 | 是的——文件、流媒体、PDF |
| 条形码生成 | 无 | 完整版 — 50 多种格式 |
| PDF处理 | 无 | 本地 |
| 服务器端部署 | 无 | 完整版 — ASP.NET Core、Azure、Lambda、Docker |
| 定价 | 移动 SDK 许可 | 一次性永久费用 749 美元起 |
详细功能对比
| 特征 | 条形码 SDK | IronBarcode |
|---|---|---|
| 阅读 | ||
| 条形码损坏恢复 | MatrixSight / DeBlur | ML纠错,ReadingSpeed.ExtremeDetail |
| 多条形码检测 | 是的——相机画面 | ExpectMultipleBarcodes = true |
| DataMatrix/DPM 支持 | 是 | 是的 — BarcodeEncoding.DataMatrix |
| 二维码读取 | 是 | 是 |
| PDF417 | 是 | 是 |
| 阿兹特克 | 是 | 是 |
| Code128、Code39、EAN | 是 | 是的——超过50种格式 |
| 自动格式检测 | 是 | 是 |
| 一代 | ||
| 条形码生成 | 无 | 完整版 — 所有格式 |
| 二维码生成 | 无 | QRCodeWriter.CreateQrCode() |
| 二维码上的标志/品牌标识 | 无 | AddBrandLogo() |
| 平台 | ||
| .NET / C# | 无 | 满的 |
| iOS(原生) | 是(主要) | 通过.NET MAUI |
| Android(原生) | 是(主要) | 通过.NET MAUI |
| Windows / Linux / macOS | 无 | 满的 |
| Docker/容器 | 无 | 满的 |
| Azure 功能 | 无 | 满的 |
| AWS Lambda | 无 | 满的 |
| 物理隔离/离线 | 是的(设备上) | 是的(完全本地化) |
| API 设计 | ||
| 异步/等待支持 | 不适用 | 满的 |
| 依赖注入 | 无 | 完整的.NET依赖注入集成 |
| PDF文档输入 | 无 | BarcodeReader.Read("doc.pdf") |
| 许可 | ||
| 许可模式 | 移动 SDK 许可 | 永久购买,一次性购买 |
| 价格(入场费) | 联系销售 | 749 美元起(Lite) |
.NET部署模型
Barkoder SDK 和IronBarcode之间最根本的区别不在于功能,而在于可用性。 .NET生态系统中不存在 Barkoder SDK。
条形码 SDK 方法
Barkoder 平台列表很明确:iOS Native(Swift / Objective-C)、Android Native(Kotlin / Java)、React Native、Flutter、Cordova、Capacitor。 不支持.NET、C#、. .NET MAUI、Xamarin、Windows、Linux 和ASP.NET Core 。 该SDK的架构是围绕移动设备上的实时摄像头管道构建的。它没有基于文件的输入模式、没有流媒体API、没有批处理路径,也没有服务器端执行模型。
缺少.NET SDK 并非小问题,而是一个完全的障碍。 没有NuGet包可供安装,没有异步 API 接口,没有依赖注入集成,不支持 Azure 或 AWS Lambda,也没有 PDF 处理功能。 社区版 MAUI 绑定仅公开了 SDK 的一个子集,并且不提供生产环境支持。
IronBarcode方法
IronBarcode可通过NuGet使用单个命令进行安装,并在启动时使用许可证密钥进行初始化:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-KEY";
// Read a barcode from an image
var results = BarcodeReader.Read("scan.png");
foreach (var result in results)
{
Console.WriteLine($"Format: {result.Format}");
Console.WriteLine($"Value: {result.Value}");
}
// NuGet: dotnet add package IronBarcode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-KEY";
// Read a barcode from an image
var results = BarcodeReader.Read("scan.png");
foreach (var result in results)
{
Console.WriteLine($"Format: {result.Format}");
Console.WriteLine($"Value: {result.Value}");
}
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-KEY"
' Read a barcode from an image
Dim results = BarcodeReader.Read("scan.png")
For Each result In results
Console.WriteLine($"Format: {result.Format}")
Console.WriteLine($"Value: {result.Value}")
Next
该库完全在本地运行——没有网络调用,没有数据传输,没有外部依赖。 它与ASP.NET Core依赖注入集成,支持 async/await,无需修改即可部署到 Docker、Azure Functions 和 AWS Lambda。 有关生产级ASP.NET Core集成,请参阅IronBarcode文档。
条形码损坏恢复
损坏条形码恢复功能是开发人员首先研究 Barkoder 的最常见原因。 Barkoder 的 MatrixSight 和 DeBlur 模式适用于物流和制造场景,在这些场景中,实体标签会磨损、受潮或部分被遮挡。
条形码 SDK 方法
Barkoder 的 DeBlur 模式会在解码尝试之前应用图像预处理——对比度增强、锐化、旋转校正。 此功能仅在移动摄像头处理流程中运行。该模式在扫描开始前于 SDK 层进行配置,摄像头视频流将持续处理。 没有等效的基于文件的路径。
// iOS Swift — not usable from C#
barkoderView.config = BarkoderConfig(licenseKey: "LICENSE_KEY") { config in
config.decoder.deblurEnabled = true
config.decoder.decoderType = .code128
}
barkoderView.startScanning { result in
print(result.textualData ?? "No result")
}
IronBarcode方法
IronBarcode 通过 ReadingSpeed.ExtremeDetail 解决了同样的问题,它激活了一个多遍图像分析流程——在尝试解码之前应用基于 ML 的损伤恢复、对比度增强、锐化和旋转校正。 这适用于任何文件、流或字节数组输入:
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-KEY";
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.ExtremeDetail,
ExpectMultipleBarcodes = false,
};
var results = BarcodeReader.Read("worn-shipping-label.png", options);
if (results.Any())
{
Console.WriteLine($"Recovered: {results.First().Value}");
}
else
{
Console.WriteLine("Could not decode — image quality too low");
}
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-KEY";
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.ExtremeDetail,
ExpectMultipleBarcodes = false,
};
var results = BarcodeReader.Read("worn-shipping-label.png", options);
if (results.Any())
{
Console.WriteLine($"Recovered: {results.First().Value}");
}
else
{
Console.WriteLine("Could not decode — image quality too low");
}
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-KEY"
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.ExtremeDetail,
.ExpectMultipleBarcodes = False
}
Dim results = BarcodeReader.Read("worn-shipping-label.png", options)
If results.Any() Then
Console.WriteLine($"Recovered: {results.First().Value}")
Else
Console.WriteLine("Could not decode — image quality too low")
End If
ReadingSpeed.Balanced 可以处理大多数干净或轻微损坏的条形码,而且速度更快。 保留 ExtremeDetail 用于 Balanced 失败的情况——它很彻底,但速度明显较慢。 有关读取复杂条形码的更多指导,请参阅IronBarcode读取文档。
多条形码检测
多条形码检测直接在两个平台之间映射:Barkoder 可处理相机画面中的多个条形码; IronBarcode可以处理文档或图像文件中的多个条形码。
条形码 SDK 方法
Barkoder 的多条形码模式可以从单个相机帧中同时检测和解码多个条形码。 在仓库环境中,一名工人将手机举过货架,一次性接收所有条形码的值。 这是在扫描开始前在 SDK 级别配置的:
// Android Kotlin — not usable from C#
barkoderView.config.decoder.multicodingEnabled = true
barkoderView.startScanning { results ->
results.forEach { result ->
println("${result.barcodeType}: ${result.textualData}")
}
}
IronBarcode方法
在.NET服务器端应用程序中,多条形码场景通常涉及一个文档——带有发货跟踪条形码和产品条形码的发票,或者每页包含多个项目的发货清单。IronBarcode使用 ExpectMultipleBarcodes = true 来处理这种情况,同样的选项对图像和 PDF 也同样有效:
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-KEY";
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
};
// Works on images and PDFs — single method call
var results = BarcodeReader.Read("shipping-manifest.pdf", options);
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber} | {barcode.Format} | {barcode.Value}");
}
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-KEY";
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
};
// Works on images and PDFs — single method call
var results = BarcodeReader.Read("shipping-manifest.pdf", options);
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber} | {barcode.Format} | {barcode.Value}");
}
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-KEY"
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True
}
' Works on images and PDFs — single method call
Dim results = BarcodeReader.Read("shipping-manifest.pdf", options)
For Each barcode In results
Console.WriteLine($"Page {barcode.PageNumber} | {barcode.Format} | {barcode.Value}")
Next
无需页面提取,无需多次请求,无需每个条形码的网络开销。 PDF 文件可通过一次调用直接读取。 有关多条形码和 PDF 读取的更多信息,请参阅IronBarcode文档。
支持 DataMatrix 和高密度格式
DataMatrix 是工业和 DPM 用例的核心——Barkoder 强调这些格式适用于制造业、医疗保健和汽车垂直行业。
条形码 SDK 方法
Barkoder 支持对激光蚀刻和点阵标记进行 DPM 配置的 DataMatrix 读取。 该 SDK 还支持 PDF417、Aztec 和其他高密度 2D 格式,在移动摄像头上具有很高的精度。 所有这些操作都在 iOS 或 Android 的相机处理流程中进行:
// iOS Swift — not usable from C#
barkoderView.config = BarkoderConfig(licenseKey: "LICENSE_KEY") { config in
config.decoder.decoderType = .dataMatrix
}
barkoderView.startScanning { result in
print(result.textualData ?? "No result")
}
Barkoder 不生成 DataMatrix 或任何其他格式的条形码。 这是一个只读 SDK。
IronBarcode方法
IronBarcode可原生读取和生成 DataMatrix 数据。 在读取方面,ReadingSpeed.ExtremeDetail 可以处理激光蚀刻 DPM 标记典型的低对比度和粗糙边缘。 在生成方面,BarcodeWriter.CreateBarcode() 生成用于创建零件标签的 DataMatrix:
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-KEY";
// Generate a DataMatrix barcode for a part label
BarcodeWriter.CreateBarcode("PART-ID-20240315-A42", BarcodeEncoding.DataMatrix)
.SaveAsPng("part-label.png");
// Generate a QR code with brand logo
QRCodeWriter.CreateQrCode("https://parts.example.com/A42", 500)
.AddBrandLogo("company-logo.png")
.SaveAsPng("branded-qr.png");
// Read auto-detects format — DataMatrix, QR, Code128, PDF417, etc.
var results = BarcodeReader.Read("etched-part.png");
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-KEY";
// Generate a DataMatrix barcode for a part label
BarcodeWriter.CreateBarcode("PART-ID-20240315-A42", BarcodeEncoding.DataMatrix)
.SaveAsPng("part-label.png");
// Generate a QR code with brand logo
QRCodeWriter.CreateQrCode("https://parts.example.com/A42", 500)
.AddBrandLogo("company-logo.png")
.SaveAsPng("branded-qr.png");
// Read auto-detects format — DataMatrix, QR, Code128, PDF417, etc.
var results = BarcodeReader.Read("etched-part.png");
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-KEY"
' Generate a DataMatrix barcode for a part label
BarcodeWriter.CreateBarcode("PART-ID-20240315-A42", BarcodeEncoding.DataMatrix) _
.SaveAsPng("part-label.png")
' Generate a QR code with brand logo
QRCodeWriter.CreateQrCode("https://parts.example.com/A42", 500) _
.AddBrandLogo("company-logo.png") _
.SaveAsPng("branded-qr.png")
' Read auto-detects format — DataMatrix, QR, Code128, PDF417, etc.
Dim results = BarcodeReader.Read("etched-part.png")
有关支持的格式和生成选项的完整列表,请参阅IronBarcode条形码生成指南。
API 映射参考
由于没有可供映射的 Barkoder C# 代码,下表概述了 Barkoder 在移动设备上的功能与IronBarcode在.NET中实现相同结果之间的概念对应关系:
| 巴科德概念 | IronBarcode等效物 |
|---|---|
| 使用许可证密钥初始化 SDK | IronBarCode.License.LicenseKey = "YOUR-KEY" |
DeblurEnabled = true |
Speed = ReadingSpeed.ExtremeDetail |
MultipleScanningEnabled = true |
ExpectMultipleBarcodes = true |
DecoderType = .dataMatrix |
BarcodeEncoding.DataMatrix(读取时自动检测到) |
startScanning(callback) |
BarcodeReader.Read("image.png") — 同步结果 |
result.textualData |
result.Value |
result.symbology |
result.Format |
| MatrixSight损伤恢复 | ReadingSpeed.ExtremeDetail 带有机器学习预处理 |
| 相机帧分析 | 文件/流/字节数组输入 |
| 设备端处理 | 完全本地通话——无需网络通话 |
| 无代际支持 | BarcodeWriter.CreateBarcode() / QRCodeWriter.CreateQrCode() |
| 不支持 PDF | BarcodeReader.Read("document.pdf") — 本地 |
| 没有服务器部署 | 适用于ASP.NET Core、Docker、Azure Functions 和 Lambda。 |
当团队考虑从 条形码 SDK 迁移到IronBarcode时
.NET项目要求
最常见的场景很简单:开发人员或团队正在构建.NET应用程序( ASP.NET Core、Windows 服务、控制台工具、桌面应用程序),并在研究过程中遇到了 Barkoder。 他们阅读了有关 MatrixSight、DeBlur 和多条形码检测的内容,发现这些功能很有吸引力,然后发现这些功能都无法通过 C# 访问。 评估在NuGet结束。 在这种情况下,各团队并没有放弃 Barkoder; 他们从一开始就为自己的平台找到了合适的工具。 IronBarcode是针对 Barkoder 在移动端所提出的需求而开发的 .NET解决方案。
服务器端条形码处理工作流程
有些团队最初会使用移动扫描应用(例如 Barkoder 或其他移动 SDK)来构建条形码处理工作流程原型,之后需要在服务器端复制或扩展该工作流程。常见的例子包括通过 API 接口处理上传的条形码图像、从文档管理系统中的 PDF 文档读取条形码,或者批量处理扫描的标签存档。 Barkoder 没有服务器端部署模型,因此这些工作流程都无法实现。 IronBarcode使用相同的静态 API 在ASP.NET Core、Azure Functions、Docker 和AWS Lambda中处理所有这些问题。
条形码生成要求
为物流、库存或合规性构建.NET应用程序的团队经常发现,读取条形码只是工作流程的一半。 生成条形码——打印标签、在文档中嵌入二维码、生成运输清单——同样重要。 Barkoder 的设计是只读的; 它没有发电能力。 当项目范围扩展到纯粹的阅读之外时,一个涵盖工作流程两端的库就无需集成第二个依赖项。 IronBarcode通过统一的 API 提供 50 多种格式的读取和生成功能。
PDF文档处理
在.NETEnterprise应用程序中,条形码经常出现在 PDF 文档中——例如发票、装运清单、医疗记录、合规文件等。 Barkoder 对这种工作流程毫无概念; 它专为移动设备上的摄像头输入而设计。需要读取传入 PDF 文档中的条形码、提取条形码数据以用于业务逻辑或验证文档存档中是否存在条形码的团队,需要一个具有原生 PDF 支持的库。 IronBarcode直接从 PDF 读取条形码,无需中间图像提取。
定价和部署可预测性
Barkoder 的移动 SDK 定价是围绕移动应用程序和分发模式构建的。 对于正在评估.NET环境工具的团队来说,这种定价模式毫无意义——SDK 根本不在.NET中运行。 当团队确定IronBarcode是其平台的合适工具时,定价模式很简单:一次性永久许可证,不收取任何请求费用,也没有数量限制,无论处理多少条形码。
常见迁移注意事项
从移动摄像头输入到基于文件的输入
已经实现了基于 Barkoder 的移动扫描原型,并且需要在.NET中复制该功能的团队会发现,输入模型从相机帧变为文件、流或字节数组。IronBarcode接受多种形式的相同数据——文件路径字符串、Stream、byte[] 或 System.Drawing.Image。 条形码处理逻辑的其他部分都相同:
// All of these call the same underlying pipeline
var results1 = BarcodeReader.Read("scan.png");
var results2 = BarcodeReader.Read(imageStream);
var results3 = BarcodeReader.Read(imageBytes);
// All of these call the same underlying pipeline
var results1 = BarcodeReader.Read("scan.png");
var results2 = BarcodeReader.Read(imageStream);
var results3 = BarcodeReader.Read(imageBytes);
' All of these call the same underlying pipeline
Dim results1 = BarcodeReader.Read("scan.png")
Dim results2 = BarcodeReader.Read(imageStream)
Dim results3 = BarcodeReader.Read(imageBytes)
速度与准确性的权衡
Barkoder 的 DeBlur 模式在配置后始终处于激活状态,并在移动相机循环中运行。IronBarcode 通过 ReadingSpeed 明确地暴露了准确性与速度之间的权衡。 对于大多数文件,ReadingSpeed.Balanced 是合适的。 对于 Balanced 解码失败的损坏或降级输入,ReadingSpeed.ExtremeDetail 将应用完整的多遍机器学习流水线。对于性能要求较高的工作流程,建议将批处理结构设置为默认使用 Balanced,仅在解码失败时才回退到 ExtremeDetail。
ASP.NET Core中的异步集成
IronBarcode 的 BarcodeReader.Read() 方法是同步的。 在处理并发请求的 ASP.NET Core 终结点中,将调用包装在 Task.Run() 中,以避免阻塞请求线程:
var results = await Task.Run(() => BarcodeReader.Read(imageBytes, options));
var results = await Task.Run(() => BarcodeReader.Read(imageBytes, options));
Dim results = Await Task.Run(Function() BarcodeReader.Read(imageBytes, options))
性能格式规范
IronBarcode默认自动检测条形码格式。 对于已知预期格式的高吞吐量场景,指定格式可以减少处理时间,因为它可以消除不匹配的格式测试。 当格式事先已知时,使用 BarcodeReaderOptions.ExpectedBarcodeFormats 来限制搜索范围。
IronBarcode的其他功能
除了与 Barkoder 的移动功能直接对应的功能外, IronBarcode还提供了一些专门针对.NET服务器和桌面环境的功能:
-二维码Logo嵌入: QRCodeWriter.CreateQrCode().AddBrandLogo() 将品牌图像添加到生成的二维码中心——这是营销和包装工作流程中的常见需求。
- PDF条形码读取:原生PDF输入意味着无需中间图像提取; 多页PDF文件通过一次调用即可扫描。
-在 PDF 上添加条形码: IronBarcode可以生成条形码并将其添加到现有的 PDF 文档中,从而实现标签和文档工作流程的自动化。
-批量图像读取:
BarcodeReader.ReadBulk()可同时处理多个图像,实现高吞吐量批量操作 -自定义二维码生成:二维码可自定义颜色、边距和纠错级别 - GS1 和 HIBC 格式:支持除标准一维和二维条码格式之外的医疗保健和供应链条码标准
.NET兼容性和未来准备情况
IronBarcode支持.NET Framework 4.6.2 和所有现代.NET版本(直至.NET 9),并且正在积极开发以确保与预计于 2026 年推出的.NET 10 兼容。该库可在 Windows、Linux 和 macOS 上运行,并已针对 Docker、Azure Functions 和AWS Lambda部署目标进行了测试。 随着.NET生态系统不断向跨平台和云原生模式发展,IronBarcode 的完全本地执行模型(没有云依赖性、没有 API 密钥管理、没有网络延迟)与现代.NET应用程序架构的方向相一致。
结论
Barkoder SDK 和IronBarcode 的运行领域截然不同。 Barkoder 是一款专为 iOS 和 Android 构建的移动相机扫描 SDK,采用 C/C++ 处理核心,并通过 CocoaPods、 Maven和混合移动框架进行分发。 IronBarcode是一个原生.NET库,专为服务器、桌面和云部署而构建,通过NuGet分发,并通过标准模式集成到.NET生态系统中。 这两个库并不在同一平台上竞争——它们在完全不同的执行环境下满足相同的条形码处理需求。
对于需要实时摄像头扫描的 iOS 或 Android 移动应用程序,Barkoder 是理想的选择。 其 MatrixSight 和 DeBlur 功能在无法控制图像质量的现场扫描场景中确实非常强大。 其多条形码检测和 DPM 支持非常适合制造和物流移动工作流程。 如果您的团队正在使用 React本地或 Flutter 为移动工作者构建使用设备摄像头扫描实物的功能,那么 Barkoder 应该纳入评估范围。
在构建需要条形码读取、条形码生成或两者兼具的.NET应用程序( ASP.NET Core API、Windows 服务、文档处理管道、桌面工具或云函数)时, IronBarcode是正确的选择。 它涵盖了从单个NuGet包实现的完整条形码工作流程,完全在本地运行,无需网络依赖,并与标准.NET模式集成,包括依赖注入、async/await 和云托管。 对于通过比较评测而选择 Barkoder 的.NET开发人员来说, IronBarcode提供了相同的核心功能——容错读取、多条形码检测、DataMatrix 和高密度格式支持——这些功能是针对.NET平台原生实现的。
实际结论很简单:如果你用 C# 编写代码,那么 Barkoder 从来就不是一个可行的选择。 评估其功能列表所花费的时间是有用的——它明确了你需要哪些功能——而IronBarcode在你的应用程序实际运行的环境中涵盖了所有这些功能。
常见问题解答
Barkoder SDK是什么?
Barkoder SDK 是一个 .NET 条形码库,用于在 C# 应用程序中生成和读取条形码。它是开发人员在为 .NET 项目选择条形码解决方案时评估的几个备选方案之一。
Barkoder SDK 和 IronBarcode 的主要区别是什么?
IronBarcode 使用静态、无状态的 API,无需实例管理,而 Barkoder SDK 通常需要在使用前创建和配置实例。IronBarcode 还提供原生 PDF 支持、自动格式检测以及跨所有环境的单密钥许可。
IronBarcode 的授权是否比 Barkoder SDK 更容易?
IronBarcode 使用单一许可证密钥,同时涵盖开发和生产部署。与将 SDK 密钥与运行时密钥分开的许可系统相比,这简化了 CI/CD 流水线和 Docker 配置。
IronBarcode 是否支持 Barkoder SDK 支持的所有条形码格式?
IronBarcode 支持超过 30 种条码符号体系,包括 QR 码、Code 128、Code 39、DataMatrix、PDF417、Aztec、EAN-13、UPC-A、GS1 等等。格式自动检测功能意味着无需显式枚举格式。
IronBarcode是否支持原生PDF条码读取?
是的。IronBarcode 可以直接从 PDF 文件中读取条形码,使用 `BarcodeReader.Read("document.pdf")` 方法,无需单独的 PDF 渲染库。每页的读取结果包括页码、条形码格式、数值和置信度评分。
IronBarcode 与 Barkoder SDK 相比,在批量处理方面有何不同?
IronBarcode 的静态方法是无状态的,并且天然线程安全,因此可以直接使用 Parallel.ForEach,而无需进行线程级实例管理。所有定价层级均无吞吐量上限。
IronBarcode支持哪些.NET版本?
IronBarcode 在单个 NuGet 包中支持 .NET Framework 4.6.2+、.NET Core 3.1 以及 .NET 5、6、7、8 和 9。平台目标包括 Windows x64/x86、Linux x64 和 macOS x64/ARM。
如何在.NET项目中安装IronBarcode?
通过 NuGet 安装 IronBarcode:在程序包管理器控制台中运行“Install-Package IronBarCode”,或在命令行界面中运行“dotnet add package IronBarCode”。无需其他 SDK 安装程序或运行时文件。
与 Barkoder 不同,我可以在购买前评估 IronBarcode 吗?
是的。IronBarcode 的试用模式会返回完整的解码条形码值——只有生成的输出图像才会带有水印。您可以在购买前,用自己的文档测试读取准确率。
Barkoder SDK 和 IronBarcode 的价格有什么区别?
IronBarcode 的永久单开发者许可证起价为 749 美元,涵盖开发和生产环境。定价详情和批量许可选项请访问 IronBarcode 许可页面。无需单独的运行时许可证。
从 Barkoder SDK 迁移到 IronBarcode 是否简单?
从 Barkoder SDK 迁移到 IronBarcode 主要涉及将基于实例的 API 调用替换为 IronBarcode 的静态方法、移除许可相关的样板代码以及更新结果属性名称。大多数迁移工作都是减少代码,而不是增加代码。
IronBarcode 能生成带有 logo 的二维码吗?
是的。`QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png")` 可以将品牌图片原生嵌入二维码中,并支持配置纠错功能。此外,它还支持通过 `ChangeBarCodeColor()` 函数创建彩色二维码。

