
条形码 SDK vs IronBarcode:移动摄像头扫描与完整 .NET 条形码覆盖
Barkoder SDK 几乎出现在所有"2026 年最佳条码 SDK"的评选中,与 ZXing、Dynamsoft、Scandit 和IronBarcode一起列入比较矩阵。 开发人员在评估.NET项目的条形码解决方案时,会在研究初期就遇到它——他们了解到 MatrixSight、DeBlur 模式、多条形码检测和 DPM 支持,并发现它确实很有吸引力。 在NuGet上,Barkoder提供两个官方.NET包:Barkoder.Xamarin。 两者都是用于移动 MAUI 和 Xamarin 应用的摄像头扫描组件。Barkoder 没有推出通用的 .NET 库:没有 ASP.NET Core、控制台、桌面、服务器或 PDF 接口。 这个比较解释了 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。 在.NET上,Barkoder发布了两个官方NuGet包——Barkoder.Xamarin——它们包装了原生iOS和Android SDK,并为MAUI和Xamarin移动应用程序提供BarkoderView摄像头扫描控件。
在 MAUI 和 Xamarin 之外,在 .NET 上没有 Barkoder 选项。 没有通用的Barkoder.NET包,没有ASP.NET Core、Azure Functions、AWS Lambda、Docker或Linux服务器目标,没有控制台、工作服务、WPF、WinForms、Avalonia或Blazor目标,没有文件或流输入模式,没有PDF读取,也没有条码生成。 对于生活在 MAUI 或 Xamarin 移动应用程序头部之外的 .NET 工作,Barkoder 不在范围内。
Barkoder SDK 的主要架构特点:
- 移动优先架构:专为 iOS 和 Android 摄像头流水线设计; 所有处理均在设备端通过 C/C++ 内核完成。
- .NET界面仅限于MAUI / Xamarin: 官方
Barkoder.Xamarin包公开了摄像头扫描控件; 没有通用的 .NET 库 -不支持条形码生成: Barkoder 是一个只读 SDK; 它不具备生成或编码条形码的功能。 - 无 PDF 或文件输入:SDK 没有从 PDF 文档、文件系统中的图像或服务器端文档工作流读取条形码的概念
- 无服务器部署:SDK 不在 ASP.NET Core、Azure Functions、Docker 容器或任何服务器端 .NET 执行环境中运行
- 仅限摄像头帧输入:输入始终是实时摄像头帧; 没有文件路径、流或字节数组重载
巴科德建筑的外观
SDK 的 C/C++ 核心负责处理图像处理。 iOS和Android的包通过平台原生API公开该核心。在.NET上,MAUI和Xamarin插件包装了相同的原生SDK,并公开了BarkoderView控件:
// dotnet add package Plugin.Maui.Barkoder
// XAML hosts a BarkoderView; this is the code-behind callback.
using Barkoder.Maui;
public partial class ScanPage : ContentPage, IBarkoderDelegate
{
public ScanPage()
{
InitializeComponent();
BarkoderView.SetFlashEnabled(false);
BarkoderView.SetZoomFactor(1.5f);
BarkoderView.StartScanning(this);
}
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
{
Console.WriteLine($"Type: {r.BarcodeTypeName}");
Console.WriteLine($"Value: {r.TextualData}");
}
}
}Imports Barkoder.Maui
Public Partial Class ScanPage
Inherits ContentPage
Implements IBarkoderDelegate
Public Sub New()
InitializeComponent()
BarkoderView.SetFlashEnabled(False)
BarkoderView.SetZoomFactor(1.5F)
BarkoderView.StartScanning(Me)
End Sub
Public Sub DidFinishScanning(result As BarcodeResult()) Implements IBarkoderDelegate.DidFinishScanning
For Each r In result
Console.WriteLine($"Type: {r.BarcodeTypeName}")
Console.WriteLine($"Value: {r.TextualData}")
Next
End Sub
End ClassImports Barkoder.Maui
Public Partial Class ScanPage
Inherits ContentPage
Implements IBarkoderDelegate
Public Sub New()
InitializeComponent()
BarkoderView.SetFlashEnabled(False)
BarkoderView.SetZoomFactor(1.5F)
BarkoderView.StartScanning(Me)
End Sub
Public Sub DidFinishScanning(result As BarcodeResult()) Implements IBarkoderDelegate.DidFinishScanning
For Each r In result
Console.WriteLine($"Type: {r.BarcodeTypeName}")
Console.WriteLine($"Value: {r.TextualData}")
Next
End Sub
End Class这在 MAUI 移动应用程序内工作,与实时摄像头一起。 没有文件重载,没有流重载,没有 PDF 重载,也没有 ASP.NET Core、控制台或桌面项目的等效接口。 本地 iOS 和 Android 代码路径在 Swift、Objective-C、Kotlin 或 Java 中使用相同的组件模型。
使 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设计:
BarcodeWriter.CreateBarcode()是静态调用,没有状态实例需要管理 -基于机器学习的错误纠正:基于机器学习的图像预处理流程可处理损坏、劣化和低质量的条形码 -原生 PDF 支持:直接从 PDF 文档读取条形码,无需中间图像提取 -完全集成.NET生态系统:兼容ASP.NET Core依赖注入、async/await、中间件和托管模式
功能对比
下表列出了 条形码 SDK 和IronBarcode之间的根本区别:
| 特征 | 条形码 SDK | IronBarcode |
|---|---|---|
| .NET / C# 支持 | MAUI / Xamarin 摄像头 UI 仅 | 完整版 - 所有.NET运行时 |
| NuGet软件包 | Plugin.Maui.Barkoder, Barkoder.Xamarin | IronBarcode |
| 条形码读取 | 是的——手机摄像头 | 是的——文件、流媒体、PDF |
| 条形码生成 | None | 完整版 - 50 多种格式 |
| PDF处理 | None | 本地 |
| 服务器端部署 | None | 完整版 - ASP.NET Core、Azure、Lambda、Docker |
| 定价 | 移动 SDK 许可 | 提供永久许可证 |
详细功能对比
| 特征 | 条形码 SDK | IronBarcode |
|---|---|---|
| 阅读 | ||
| 条形码损坏恢复 | MatrixSight / DeBlur | ML误差校正,ReadingSpeed.ExtremeDetail |
| 多条形码检测 | 是的——相机画面 | ExpectMultipleBarcodes = true |
| DataMatrix/DPM 支持 | 是 | 是的——BarcodeEncoding.DataMatrix |
| 二维码读取 | 是 | 是 |
| PDF417 | 是 | 是 |
| 阿兹特克 | 是 | 是 |
| Code128、Code39、EAN | 是 | 是的——超过50种格式 |
| 自动格式检测 | 是 | 是 |
| 一代 | ||
| 条形码生成 | None | 完整版 - 所有格式 |
| 二维码生成 | None | QRCodeWriter.CreateQrCode() |
| 二维码上的标志/品牌标识 | None | AddBrandLogo() |
| 平台 | ||
| .NET / C# | MAUI / Xamarin 摄像头 UI 仅 | 满的 |
| iOS(原生) | 是(主要) | 通过.NET MAUI |
| Android(原生) | 是(主要) | 通过.NET MAUI |
| Windows / Linux / macOS | None | 满的 |
| Docker/容器 | None | 满的 |
| Azure Functions | None | 满的 |
| AWS Lambda | None | 满的 |
| 物理隔离/离线 | 是的(设备上) | 是的(完全本地化) |
| API 设计 | ||
| Async/Await支持 | 不适用 | 满的 |
| 依赖注入 | None | 完整的.NET依赖注入集成 |
| PDF文档输入 | None | BarcodeReader.Read("doc.pdf") |
| 许可 | ||
| 许可模式 | 移动 SDK 许可 | 永久购买,一次性购买 |
| 价格(入场费) | 联系销售 | See ironsoftware.com/csharp/barcode/licensing |
.NET部署模型
Barkoder SDK 和IronBarcode之间最根本的区别是范围。 Barkoder 的 .NET 界面仅限于 MAUI 和 Xamarin 摄像头 UI;IronBarcode覆盖 .NET 生态系统的其余部分。
条形码 SDK 方法
Barkoder 发布的平台列表包括 iOS 原生 (Swift / Objective-C)、Android 原生 (Kotlin / Java)、React Native、Flutter、Cordova、Capacitor、.NET MAUI、Xamarin 和 Web (WASM)。 专门在.NET上,这映射到Barkoder.Xamarin。 ASP.NET Core、Azure Functions、AWS Lambda、Docker、Linux 服务器、WPF、WinForms、Avalonia 和 Blazor 均不存在。 该SDK的架构是围绕移动设备上的实时摄像头管道构建的。它没有基于文件的输入模式、没有流媒体API、没有批处理路径,也没有服务器端执行模型。
对于 MAUI 或 Xamarin 移动应用程序之外的 .NET 工作 —— 后端 API、工作服务、桌面工具、PDF 文档流水线 —— Barkoder 不提供解决方案。 没有用于服务器使用的异步 API 界面,没有依赖注入集成,没有 Azure 或AWS Lambda支持,也没有 PDF 处理功能。
IronBarcode方法
IronBarcode可通过NuGet使用单个命令进行安装,并在启动时使用许可证密钥进行初始化:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-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-LICENSE-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-LICENSE-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}")
NextImports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-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 层进行配置,摄像头视频流将持续处理。 没有等效的基于文件的路径。
// dotnet add package Plugin.Maui.Barkoder
// Configured against the BarkoderView in a MAUI ContentPage
BarkoderView.DeblurEnabled = true;
BarkoderView.SetEnabledBarcodeTypes(new[] { BarcodeType.Code128 });
BarkoderView.StartScanning(this);// dotnet add package Plugin.Maui.Barkoder
// Configured against the BarkoderView in a MAUI ContentPage
BarkoderView.DeblurEnabled = true;
BarkoderView.SetEnabledBarcodeTypes(new[] { BarcodeType.Code128 });
BarkoderView.StartScanning(this);netnetIronBarcode方法
IronBarcode通过ReadingSpeed.ExtremeDetail解决了同样的问题,在尝试解码之前激活了多遍图像分析管道——应用基于ML的损坏恢复、对比度增强、锐化和旋转校正。 这适用于任何文件、流或字节数组输入:
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-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-LICENSE-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-LICENSE-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 IfImports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-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 IfReadingSpeed.Balanced能处理绝大多数干净或轻微损坏的条码,而且速度更快。 为Balanced失败的情况下——它非常彻底但速度显著较慢。 有关读取复杂条形码的更多指导,请参阅IronBarcode读取文档。
多条形码检测
多条形码检测直接在两个平台之间映射:Barkoder 可处理相机画面中的多个条形码; IronBarcode可以处理文档或图像文件中的多个条形码。
条形码 SDK 方法
Barkoder 的多条形码模式可以从单个相机帧中同时检测和解码多个条形码。 在仓库环境中,一名工人将手机举过货架,一次性接收所有条形码的值。 这是在扫描开始前在 SDK 级别配置的:
// Plugin.Maui.Barkoder — multi-scan mode in a MAUI ContentPage
BarkoderView.MulticodeCachingEnabled = true;
BarkoderView.StartScanning(this);
// IBarkoderDelegate callback delivers all decoded codes per frame
public void DidFinishScanning(BarcodeResult[] results)
{
foreach (var r in results)
Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}");
}// Plugin.Maui.Barkoder — multi-scan mode in a MAUI ContentPage
BarkoderView.MulticodeCachingEnabled = true;
BarkoderView.StartScanning(this);
// IBarkoderDelegate callback delivers all decoded codes per frame
public void DidFinishScanning(BarcodeResult[] results)
{
foreach (var r in results)
Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}");
}' Plugin.Maui.Barkoder — multi-scan mode in a MAUI ContentPage
BarkoderView.MulticodeCachingEnabled = True
BarkoderView.StartScanning(Me)
' IBarkoderDelegate callback delivers all decoded codes per frame
Public Sub DidFinishScanning(results As BarcodeResult())
For Each r In results
Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}")
Next
End Sub' Plugin.Maui.Barkoder — multi-scan mode in a MAUI ContentPage
BarkoderView.MulticodeCachingEnabled = True
BarkoderView.StartScanning(Me)
' IBarkoderDelegate callback delivers all decoded codes per frame
Public Sub DidFinishScanning(results As BarcodeResult())
For Each r In results
Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}")
Next
End SubIronBarcode方法
在.NET服务器端应用程序中,多条形码场景通常涉及一个文档——带有发货跟踪条形码和产品条形码的发票,或者每页包含多个项目的发货清单。 IronBarcode通过ExpectMultipleBarcodes = true处理此问题,并且相同的选项在图像和PDF上效果相同:
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-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-LICENSE-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-LICENSE-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}")
NextImports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-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 的相机处理流程中进行:
// Plugin.Maui.Barkoder — DataMatrix scanning in a MAUI ContentPage
BarkoderView.SetEnabledBarcodeTypes(new[] { BarcodeType.DataMatrix });
BarkoderView.StartScanning(this);// Plugin.Maui.Barkoder — DataMatrix scanning in a MAUI ContentPage
BarkoderView.SetEnabledBarcodeTypes(new[] { BarcodeType.DataMatrix });
BarkoderView.StartScanning(this);' Plugin.Maui.Barkoder — DataMatrix scanning in a MAUI ContentPage
BarkoderView.SetEnabledBarcodeTypes(New BarcodeType() { BarcodeType.DataMatrix })
BarkoderView.StartScanning(Me)' Plugin.Maui.Barkoder — DataMatrix scanning in a MAUI ContentPage
BarkoderView.SetEnabledBarcodeTypes(New BarcodeType() { BarcodeType.DataMatrix })
BarkoderView.StartScanning(Me)Barkoder 不生成 DataMatrix 或任何其他格式的条形码。 这是一个只读 SDK。
IronBarcode方法
IronBarcode可原生读取和生成 DataMatrix 数据。 在读取方面,ReadingSpeed.ExtremeDetail处理激光蚀刻DPM标记的低对比度和粗糙边缘。 在生成方面,BarcodeWriter.CreateBarcode()生成用于零件标签创建的DataMatrix:
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-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-LICENSE-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-LICENSE-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")Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-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 的 MAUI 摄像头扫描 API 与IronBarcode如何在任何 .NET 项目中对文件、流或 PDF 输入实现相同结果的概念等效性:
| 巴科德概念 | IronBarcode等效物 |
|---|---|
| 使用许可证密钥初始化 SDK | IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY" |
BarkoderView.DeblurEnabled = true | Speed = ReadingSpeed.ExtremeDetail |
BarkoderView.MulticodeCachingEnabled = true | ExpectMultipleBarcodes = true |
SetEnabledBarcodeTypes(BarcodeType.DataMatrix) | BarcodeEncoding.DataMatrix (读取时自动检测) |
BarkoderView.StartScanning(this) | BarcodeReader.Read("image.png") - 同步结果 |
BarcodeResult.TextualData | result.Value |
BarcodeResult.BarcodeTypeName | result.Format |
| MatrixSight损伤恢复 | ReadingSpeed.ExtremeDetail 使用ML预处理 |
| 相机帧分析 | 文件/流/字节数组输入 |
| 设备端处理 | 完全本地通话——无需网络通话 |
| 无代际支持 | BarcodeWriter.CreateBarcode() / QRCodeWriter.CreateQrCode() |
| 不支持 PDF | BarcodeReader.Read("document.pdf") - 原生 |
| 没有服务器部署 | 适用于ASP.NET Core、Docker、Azure Functions 和 Lambda。 |
当团队考虑从 条形码 SDK 迁移到IronBarcode时
MAUI 外的 .NET 项目要求
最常见的场景很简单:开发人员或团队正在构建.NET应用程序( ASP.NET Core、Windows 服务、控制台工具、桌面应用程序),并在研究过程中遇到了 Barkoder。 他们阅读了MatrixSight、DeBlur和多条码检测,发现这些功能很吸引人,然后发现.NET界面是Barkoder.Xamarin——均仅用于移动摄像头UI。 在这种情况下,各团队并没有放弃 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 工作在 MAUI 或 Xamarin 之外的团队,该定价模型不适用,因为 SDK 不在那里运行。 当IronBarcode是合适的工具时,定价模型是简单明了的:永久许可证,没有每次请求的费用,也没有处理的条形码数量的体积限制。
常见迁移注意事项
从移动摄像头输入到基于文件的输入
已经实现了基于 Barkoder 的移动扫描原型,并且需要在.NET中复制该功能的团队会发现,输入模型从相机帧变为文件、流或字节数组。 IronBarcode接受多种形式的数据——文件路径字符串、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)' 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是合适的。 对于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))Dim results = Await Task.Run(Function() BarcodeReader.Read(imageBytes, options))性能格式规范
IronBarcode默认自动检测条形码格式。 对于已知预期格式的高吞吐量场景,指定格式可以减少处理时间,因为它可以消除不匹配的格式测试。 使用BarcodeReaderOptions.ExpectBarcodeTypes在格式预先已知时限制搜索。
##IronBarcode的其他功能
除了与 Barkoder 的移动功能直接对应的功能外, IronBarcode还提供了一些专门针对.NET服务器和桌面环境的功能:
- QR码标识嵌入:
QRCodeWriter.CreateQrCode().AddBrandLogo()在生成的QR码中心添加品牌图像——这是营销和包装工作流的常见要求 - PDF条形码读取:原生PDF输入意味着无需中间图像提取; 多页PDF文件通过一次调用即可扫描。 -在 PDF 上添加条形码: IronBarcode可以生成条形码并将其添加到现有的 PDF 文档中,从而实现标签和文档工作流程的自动化。
- 批量图像读取:
BarcodeReader.ReadBulk()同时处理多张图像,以实现高吞吐量的批量操作 -自定义二维码生成:二维码可自定义颜色、边距和纠错级别 - GS1 和 HIBC 格式:支持除标准一维和二维条码格式之外的医疗保健和供应链条码标准
.NET兼容性和未来准备情况
IronBarcode 支持 .NET Framework 4.6.2 和所有现代 .NET 版本到 .NET 9,并积极跟踪 .NET 10 发布周期进行开发。 该库能在 Windows、Linux 和 macOS 上运行,并针对 Docker、Azure Functions 和AWS Lambda部署目标进测试。 随着.NET生态系统不断向跨平台和云原生模式发展,IronBarcode 的完全本地执行模型(没有云依赖性、没有 API 密钥管理、没有网络延迟)与现代.NET应用程序架构的方向相一致。
结论
Barkoder SDK 和IronBarcode在主要不同领域中操作。 Barkoder是一款为iOS和Android而构建的移动摄像头扫描SDK,具有C/C++处理核心、混合移动分发,并在NuGet上提供Barkoder.Xamarin用于MAUI和Xamarin摄像头UI。IronBarcode是一个原生 .NET 库,为服务器、桌面、MAUI 程序化处理和云部署构建,通过 NuGet 分发并通过标准模式集成到 .NET 生态系统中。 这两个库的重叠很窄 —— 仅限于 MAUI 和 Xamarin,并且 仅限于摄像头 UI 使用场景。
Barkoder 是构建 MAUI、Xamarin、React Native、Flutter、Cordova 或 Capacitor 移动应用程序内摄像头扫描 UI 时的理想选择。其 MatrixSight 和 DeBlur 功能在无法控制图像质量的现场扫描场景中确实强大。 其多条形码检测和 DPM 支持非常适合制造和物流移动工作流程。 如果您的团队正在为使用设备摄像头扫描实物的工作人员构建移动前端,Barkoder 应该在评估中。
在构建需要条形码读取、条形码生成或两者兼具的.NET应用程序( ASP.NET Core API、Windows 服务、文档处理管道、桌面工具或云函数)时, IronBarcode是正确的选择。 它涵盖了从单个NuGet包实现的完整条形码工作流程,完全在本地运行,无需网络依赖,并与标准.NET模式集成,包括依赖注入、async/await 和云托管。 对于在比较汇总中被指引到 Barkoder 的 .NET 开发者,IronBarcode 提供相同的核心功能 —— 能够容忍损害的读取、多个条形码的检测、DataMatrix 和高密度格式支持 —— 实现对文件、流和 PDF 输入的实现,跨 .NET 平台。
实际结论很简单:根据使用案例进行选择。 MAUI 摄像头 UI 清晰映射到 Barkoder; 文件、流、PDF、生成或任何非 MAUI .NET 界面清晰映射到 IronBarcode。 许多生产系统运行两者 —— 移动客户端上的 Barkoder 和服务器上的IronBarcode—— 这两者自然地集成为混合体。
Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。
相关文章


