跳至頁尾內容
與其他組件的比較

Barcode4.NET 與 IronBarcode:C# 條碼庫對比

BarcodeScanning.Native.Maui 與 IronBarcode:相機控制 vs 完整 Barcode SDK

BarcodeScanning.Native.Maui 是一個限於 MAUI 應用程式的相機插件。 如果您的應用處理上傳的文件或從PDF讀取條碼,它不是為該使用情境設計的。 該套件將自己描述為".NET MAUI 的條碼掃瞄庫",實際上它是一個 CameraView 控制項,當條碼進入實時相機框架時會觸發一個事件。 這是完整的功能集。 此比較檢查相機控制庫與功能完整的條碼 SDK 之間的架構差異,幫助團隊了解每個工具的用途。

瞭解 BarcodeScanning.MAUI

BarcodeScanning.Native.Maui 將 iOS/macOS(Apple 的 Vision 框架)、Android(Google ML Kit)和 Windows (ZXingCpp,3.0.1版本新增)上的本地相機條碼檢測 API 封裝到 MAUI CameraView 控制項中。 開發者將控制項放入 XAML 頁面中,連接事件處理程式,每次在實時相機饋送中檢測到條碼時,庫就會觸發該事件。 整個交互模式是相機進入、事件輸出——沒有其他路徑。

該庫是開源的,並且在 MIT 許可證下免費。 其設計目標狹窄而明確:以儘可能少的 API 表面為 MAUI 應用程式提供實時相機條碼檢測。 它通過委託給每個平台的本地引擎實現該目標,而不是實現自己的解碼引擎。

BarcodeScanning.Native.Maui 的關鍵架構特徵:

  • 僅相機輸入: 該庫僅接受實時相機框架。 公共 API 中沒有 ReadFromStream()ReadFromPdf() 方法。
  • 僅 MAUI 目標: 該庫支持 MAUI 目標——iOS、Android、Windows(自3.0.1起,使用 ZXingCpp),和 macOS Catalyst。在非 MAUI 項目中(沒有 ASP.NET、控制台、WPF,或 WinForms)不能使用。
  • 三個不同的引擎: iOS/macOS 使用 Apple Vision,Android 使用 Google ML Kit,Windows 使用 ZXingCpp。 符號覆蓋和解碼行為因這三個引擎而異。
  • 無生成能力: BarcodeScanning.Native.Maui 從相機框架讀取條碼。 它不能生成任何格式的條碼。
  • iOS 上的 UPC-A 特性: Apple 的 Vision 框架可以返回 13 位數的 UPC-A 條碼(在前面新增一個前零以符合 EAN-13 編碼)。 該庫傳遞此原始值,應用程式根據需要進行標準化。
  • iOS / Android 上的 PDF417 可靠性: 該庫的 GitHub 問題跟踪記錄描述了 PDF417 掃描在 Vision/ML Kit 程式碼路徑上"非常有問題——大多數掃描從未發生",這與運送標籤、駕駛執照和登機牌相關。
  • 最小公共介面: 公共 API 包含 OnDetectionFinishedEventArgBarcodeResult 並帶有 DisplayValueBarcodeFormat。 這就是應用程式碼與之互動的全部內容。
  • MIT 許可證,無成本: 該庫免費使用且無需支付許可費。

實時相機掃描模式

整個 BarcodeScanning.Native.Maui API 模式是 XAML 控制項搭配 C# 事件處理程式:


<scanner:CameraView x:Name="CameraView"
                    OnDetectionFinished="OnBarcodeDetected"
                    CameraEnabled="True"
                    BarcodeFormats="All" />

<scanner:CameraView x:Name="CameraView"
                    OnDetectionFinished="OnBarcodeDetected"
                    CameraEnabled="True"
                    BarcodeFormats="All" />
XML
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArg e)
{
    var barcode = e.BarcodeResults.FirstOrDefault();
    if (barcode != null)
        ResultLabel.Text = barcode.DisplayValue;
}
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArg e)
{
    var barcode = e.BarcodeResults.FirstOrDefault();
    if (barcode != null)
        ResultLabel.Text = barcode.DisplayValue;
}
Private Sub OnBarcodeDetected(sender As Object, e As OnDetectionFinishedEventArg)
    Dim barcode = e.BarcodeResults.FirstOrDefault()
    If barcode IsNot Nothing Then
        ResultLabel.Text = barcode.DisplayValue
    End If
End Sub
$vbLabelText   $csharpLabel

該控件為使用者提供嵌入 MAUI 頁面中的實時觀景窗。 條碼檢測在相機饋送活動時不斷觸發。該 UX 非常適合主動檢測型態的消費者應用程式,當中的主要互動為"對準即掃描"。 限制在於這是該庫支持的唯一交互——在 MAUI 環境中超越實時相機檢測的需求都不在其範圍內。

理解IronBarcode

IronBarcode 是一個為 .NET 設計的商業條碼讀取和生成庫,其運行於資料輸入而不是相機流之上。 它從圖像文件、位元組陣列、流和 PDF 文件中讀取條碼。 在 MAUI 上,它通過 MediaPicker 與系統相機整合——即應用程式用於選擇相片的相同標準 MAUI API——捕捉相片,然後將生成的圖像作為靜態輸入進行處理。

IronBarcode 實現了自己的受管理條碼解碼引擎,而不是委託給平台特定的本地 API。這意味著相同的 BarcodeReader.Read() 調用在所有支持的 .NET 目標上表現一致——Windows、Linux、macOS、ASP.NET 和後台服務進程——以及 MAUI 移動目標在拍攝圖片並將其傳遞給讀取器時。 該庫還通過 BarcodeWriterQRCodeWriter 提供完整的條碼生成 API。

IronBarcode的關鍵特性:

  • 基於靜態文件的 API: BarcodeReader.Read() 接受文件路徑、字節陣列、流或 PDF——任何靜態資料來源。
  • 廣泛的平台覆蓋: Windows、Linux 和 macOS(包括 ARM)均受到支持,連同 .NET Framework 4.6.2+、.NET Core 3.1+ 和 .NET 5/6/7/8。所有支持的目標上運行的都是相同的受管理程式碼,而無需按平台分支。
  • 條碼生成: BarcodeWriter.CreateBarcode()QRCodeWriter.CreateQrCode() 生成 Code128、QR、DataMatrix 和其他格式作為圖像文件或字節陣列。
  • PDF支持: 嵌入在PDF文件中的條碼可以直接讀取,無需中間圖像提取步驟。
  • 一致的 UPC-A 解碼: 通過其受管理引擎返回標準的 12 位 UPC-A 值。
  • 商業許可證: Lite $749、Plus $1,499、Professional $2,999、Unlimited $5,999——永久許可證,一年支持。
  • 伺服器端部署: 在ASP.NET、Azure Functions、Docker容器和AWS Lambda中運行,而無需物理相機的平臺依賴性。

特性比較

下表強調了 BarcodeScanning.Native.Maui 和IronBarcode之間的基本差異:

特性 BarcodeScanning.MAUI IronBarcode
主要目的 實時相機條碼檢測 從任何資料來源讀取和生成條碼
輸入來源 僅限實時相機框架 文件、字節陣列、流、PDFs
平臺支持 只支持 MAUI——iOS、Android、Windows(通過 ZXingCpp)、macOS Catalyst Windows、Linux、macOS、ASP.NET、控制台、WPF,以及 MAUI 通過擷取的圖像
識別引擎 三個引擎(Apple Vision / Google ML Kit / ZXingCpp) 所有目標平臺中使用單一的受管理引擎
條碼生成 是的——BarcodeWriter + QRCodeWriter
許可模式 MIT(免費、開放源碼) 商用——Lite $749 至 Unlimited $5,999
伺服器端 / ASP.NET

詳細特性比較

特性 BarcodeScanning.MAUI IronBarcode
讀取
實時相機幀讀取 是的——CameraView 控制項 否(使用 MediaPicker 捕捉然後讀取)
應用內相機觀景窗 是的——實時連續 否——通過 MediaPicker 使用系統相機 UI
從圖像檔案讀取 是的——BarcodeReader.Read(path)
從字節陣列讀取 是的——BarcodeReader.Read(bytes)
從流中讀取 是的——BarcodeReader.Read(stream)
從PDF讀取 是的——BarcodeReader.Read(pdf)
多條碼檢測 是的 (每幀多個,通過e.BarcodeResults) 是的 (ExpectMultipleBarcodes 選項)
讀取速度控制 None ReadingSpeed.Faster / Balanced / Detailed / ExtremeDetail
iOS上的UPC-A 可以返回13個數字; applications normalize 返回標準的12位UPC-A
PDF417 可靠性 在iOS/Android引擎上的記錄問題 支持
生成
條碼生成 是的——BarcodeWriter.CreateBarcode()
QR碼生成 是的——QRCodeWriter.CreateQrCode()
輸出為PNG / 字節陣列
平台
iOS MAUI 是的 (Apple Vision) 是的 (通過捕獲的圖像)
Android MAUI 是的 (Google ML Kit) 是的 (通過捕獲的圖像)
Windows MAUI 是的 (ZXingCpp,自3.0.1起)
macOS MAUI 是的 (Mac Catalyst,Apple Vision)
ASP.NET / 伺服器端
Docker / Azure / AWS Lambda
.NET Framework 支持 否 (僅限 MAUI) 是的——.NET Framework 4.6.2+
授權
許可型別 MIT(開源) 商業永久的
成本 免費 Lite $749, Plus $1,499, Professional $2,999, Unlimited $5,999
評估模式 不適用 提供免費試用

架構:相機控制 vs 文件處理 API

這兩個庫之間最根本的區別是輸入模式。 BarcodeScanning.Native.Maui 是圍繞連續相機流設計的;IronBarcode則是圍繞離散的資料輸入而設計的。 這不是相同想法的競爭實現——它們是針對不同使用情況的不同架構選擇。

BarcodeScanning.MAUI 方法

BarcodeScanning.Native.Maui 封裝了每個平臺上的本地相機檢測管道。 在 Android 上,ML Kit 處理幀; 在 iOS 和 macOS 上,Apple 的 Vision 框架處理幀; 在 Windows 上,ZXingCpp 處理幀。 該庫將其顯示為 MAUI CameraView 控制項搭配 OnDetectionFinished 事件。 應用程式碼永遠不直接處理圖像位元組——它僅處理從事件中產生的檢測條碼值。

private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArg e)
{
    var barcode = e.BarcodeResults.FirstOrDefault();
    if (barcode != null)
        ResultLabel.Text = barcode.DisplayValue;
}
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArg e)
{
    var barcode = e.BarcodeResults.FirstOrDefault();
    if (barcode != null)
        ResultLabel.Text = barcode.DisplayValue;
}
Private Sub OnBarcodeDetected(sender As Object, e As OnDetectionFinishedEventArg)
    Dim barcode = e.BarcodeResults.FirstOrDefault()
    If barcode IsNot Nothing Then
        ResultLabel.Text = barcode.DisplayValue
    End If
End Sub
$vbLabelText   $csharpLabel

這一設計的後果是沒有其他入口點。 相機不是可選的——它是該庫所知道的唯一輸入。 伺服器、文件、PDF 或任何非 MAUI 主機都沒有進入該庫的路徑。

IronBarcode方法

IronBarcode 通過其 BarcodeReader.Read() 靜態方法接收圖像資料。 調用者提供資料——來自任何來源——然後由該庫進行解碼。 在 MAUI 上,資料來自 MediaPicker; 在伺服器上,它來自表單上傳; 在桌面應用中,它來自文件對話框。

//IronBarcodein MAUI: capture a photo, then read barcodes from it
// NuGet: dotnet add package IronBarcode
using IronBarCode;

private async void ScanBarcodeButton_Clicked(object sender, EventArgs e)
{
    var photo = await MediaPicker.CapturePhotoAsync();
    if (photo == null) return;

    using var stream = await photo.OpenReadAsync();
    using var ms = new MemoryStream();
    await stream.CopyToAsync(ms);

    var results = BarcodeReader.Read(ms.ToArray());
    foreach (var result in results)
        ResultLabel.Text = result.Value;
}
//IronBarcodein MAUI: capture a photo, then read barcodes from it
// NuGet: dotnet add package IronBarcode
using IronBarCode;

private async void ScanBarcodeButton_Clicked(object sender, EventArgs e)
{
    var photo = await MediaPicker.CapturePhotoAsync();
    if (photo == null) return;

    using var stream = await photo.OpenReadAsync();
    using var ms = new MemoryStream();
    await stream.CopyToAsync(ms);

    var results = BarcodeReader.Read(ms.ToArray());
    foreach (var result in results)
        ResultLabel.Text = result.Value;
}
Imports IronBarCode
Imports System.IO

'IronBarcode in MAUI: capture a photo, then read barcodes from it
' NuGet: dotnet add package IronBarcode

Private Async Sub ScanBarcodeButton_Clicked(sender As Object, e As EventArgs)
    Dim photo = Await MediaPicker.CapturePhotoAsync()
    If photo Is Nothing Then Return

    Using stream = Await photo.OpenReadAsync()
        Using ms As New MemoryStream()
            Await stream.CopyToAsync(ms)

            Dim results = BarcodeReader.Read(ms.ToArray())
            For Each result In results
                ResultLabel.Text = result.Value
            Next
        End Using
    End Using
End Sub
$vbLabelText   $csharpLabel

這一程式碼在 MAUI 目標平臺中執行相同,該目標可以捕獲圖像。 對於伺服器端使用,相同的 BarcodeReader.Read() 方法接受上傳文件的位元組陣列或 PDF 路徑。 IronBarcode 文件 涵蓋了所有支持的輸入型別。

平臺覆蓋和識別引擎

平臺覆蓋對於構建 MAUI 應用而可能還需要與非 MAUI 項目共享條碼邏輯的團隊來說很重要。

BarcodeScanning.MAUI 方法

BarcodeScanning.Native.Maui 支持所有四個 MAUI 目標(iOS、Android、Windows 自 3.0.1 起,和 macOS Catalyst),但每個目標使用不同的識別引擎:iOS 和 macOS 使用 Apple Vision,Android 使用 Google ML Kit,Windows 使用 ZXingCpp。 符號學覆盖和解碼行為因這三個引擎而異,因此在一個平臺上可靠解碼的條碼在另一個平臺可能表現不同。 在 MAUI 之外(ASP.NET、控制台、WPF、WinForms、Blazor 伺服器、Azure Functions)該庫沒有實現。 需要在 MAUI 應用和後台服務中使用條碼邏輯的團隊必須為非 MAUI 程式碼使用不同的庫。

IronBarcode方法

IronBarcode 的 BarcodeReader.Read() 調用在每個支持的目標上使用相同的受管理引擎,因此行為在 Windows、Linux、macOS、ASP.NET 和任何可以捕獲圖像並將其交給讀者的 MAUI 目標中是一致的。 沒有 #if WINDOWS 區塊,沒有条件依赖載入,沒有需要的僅占實現。 對於文件和 PDF 輸入,其模式也是一致的:

using IronBarCode;

// Read barcodes from a file the user selected
var file = await FilePicker.PickAsync();
if (file != null)
{
    var results = BarcodeReader.Read(file.FullPath);
    foreach (var result in results)
        Console.WriteLine($"{result.Format}: {result.Value}");
}

// Read barcodes directly from a PDF — no image extraction step needed
var pdfResults = BarcodeReader.Read("shipment-manifest.pdf");
using IronBarCode;

// Read barcodes from a file the user selected
var file = await FilePicker.PickAsync();
if (file != null)
{
    var results = BarcodeReader.Read(file.FullPath);
    foreach (var result in results)
        Console.WriteLine($"{result.Format}: {result.Value}");
}

// Read barcodes directly from a PDF — no image extraction step needed
var pdfResults = BarcodeReader.Read("shipment-manifest.pdf");
Imports IronBarCode

' Read barcodes from a file the user selected
Dim file = Await FilePicker.PickAsync()
If file IsNot Nothing Then
    Dim results = BarcodeReader.Read(file.FullPath)
    For Each result In results
        Console.WriteLine($"{result.Format}: {result.Value}")
    Next
End If

' Read barcodes directly from a PDF — no image extraction step needed
Dim pdfResults = BarcodeReader.Read("shipment-manifest.pdf")
$vbLabelText   $csharpLabel

IronBarcode MAUI 整合指南 提供了所有 MAUI 目標的完整設置說明。IronBarcode也支持在ASP.NET、Docker、Azure Functions 和 AWS Lambda 環境中進行伺服器端部署,在這些環境中 BarcodeScanning.Native.Maui 根本沒有路徑。

條碼讀取精確性:UPC-A 和 PDF417

BarcodeScanning.Native.Maui 中有兩種具體格式的行為值得注意,適用於生產應用程式。

BarcodeScanning.MAUI 方法

在 iOS 上,BarcodeScanning.Native.Maui 的底層檢測(Apple Vision)可能會返回 13 位數的 UPC-A 條碼。 UPC-A 是一種 12 位數格式; 多出的一個前導零符合 EAN-13 編碼。 該庫傳遞此原始值,應用程式根據需要進行標準化。 未進行標準化的情況下將 UPC-A 值儲存在資料庫中的應用可能會積累帶有前零的記錄。

文件化的工作區檢查格式並修剪值:

// Normalize iOS UPC-A — strip the leading zero when present
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArg e)
{
    var barcode = e.BarcodeResults.FirstOrDefault();
    if (barcode == null) return;

    var value = barcode.DisplayValue;
    if (barcode.BarcodeFormat == BarcodeFormats.Upca && value.Length == 13)
        value = value.Substring(1);

    ProcessBarcode(value);
}
// Normalize iOS UPC-A — strip the leading zero when present
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArg e)
{
    var barcode = e.BarcodeResults.FirstOrDefault();
    if (barcode == null) return;

    var value = barcode.DisplayValue;
    if (barcode.BarcodeFormat == BarcodeFormats.Upca && value.Length == 13)
        value = value.Substring(1);

    ProcessBarcode(value);
}
' Normalize iOS UPC-A — strip the leading zero when present
Private Sub OnBarcodeDetected(sender As Object, e As OnDetectionFinishedEventArg)
    Dim barcode = e.BarcodeResults.FirstOrDefault()
    If barcode Is Nothing Then Return

    Dim value = barcode.DisplayValue
    If barcode.BarcodeFormat = BarcodeFormats.Upca AndAlso value.Length = 13 Then
        value = value.Substring(1)
    End If

    ProcessBarcode(value)
End Sub
$vbLabelText   $csharpLabel

格式檢查是必要的,這樣以 0 開頭的 EAN-13 值不會被錯誤修剪。 PDF417 在 GitHub 問題中被單獨記錄為"非常有問題——大多數掃描從未發生"在 iOS/Android 引擎上,這與運送標籤、駕駛執照和登機牌相關。

IronBarcode方法

IronBarcode 通過其受管理引擎返回標準的 12 位 UPC-A 值。PDF417 是支持的格式。 生成方面也通過IronBarcode的 API提供:

using IronBarCode;

// Generate a QR code
QRCodeWriter.CreateQrCode("https://example.com", 500)
    .SaveAsPng("qr.png");

// Generate a Code128 barcode
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("barcode.png");
using IronBarCode;

// Generate a QR code
QRCodeWriter.CreateQrCode("https://example.com", 500)
    .SaveAsPng("qr.png");

// Generate a Code128 barcode
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("barcode.png");
Imports IronBarCode

' Generate a QR code
QRCodeWriter.CreateQrCode("https://example.com", 500) _
    .SaveAsPng("qr.png")

' Generate a Code128 barcode
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128) _
    .ResizeTo(400, 100) _
    .SaveAsPng("barcode.png")
$vbLabelText   $csharpLabel

對於條碼資料精確性直接影響庫存查閱、銷售點交易或供應鏈整合的應用程式,IronBarcode 的一致格式處理減少了平臺特定標準化的需求。 IronBarcode 條碼讀取文件 詳細介紹了具體格式行為。

API對映參考

BarcodeScanning.Native.Maui IronBarcode
CameraView XAML 控制項 無相機控制——使用 MediaPicker.CapturePhotoAsync() 捕獲
OnDetectionFinished 事件 BarcodeReader.Read(imageBytes)
e.BarcodeResults 返回的值 BarcodeReader.Read() (IEnumerable)
e.BarcodeResults.FirstOrDefault() results.FirstOrDefault()
barcode.DisplayValue result.Value
barcode.BarcodeFormat result.Format
BarcodeFormats="All" 自動檢測——多格式無需配置
CameraEnabled="True" MediaPicker.CapturePhotoAsync() 調用
僅限 MAUI (iOS、Android、Windows、macOS) MAUI(通過捕獲的圖像)+ ASP.NET、控制台、WPF、桌面、伺服器
僅限相機框架 文件、字節陣列、流、PDFs
無文件/PDF API BarcodeReader.Read(path) ——接受圖像文件和PDFs
三個引擎通過MAUI目標 所有目標平臺中使用單一的受管理引擎
無生成 API BarcodeWriter.CreateBarcode() + QRCodeWriter.CreateQrCode()

團隊考慮從 BarcodeScanning.MAUI 遷移到IronBarcode的時候

跨平臺引擎的一致性變成需求

當使用 BarcodeScanning.Native.Maui 時,目標 iOS、Android、Windows 和 macOS 的 MAUI 應用程式拾取三個不同的識別引擎:Apple Vision(iOS/macOS)、Google ML Kit(Android)和 ZXingCpp(Windows)。 每個引擎有自己符號學覆蓋和解碼行為,因此相同條碼可能在各平臺上解碼不同——而應用程式通常會新增標準化層來隱藏差異。 當這一維護工作量增長,或當 QA 報告與引擎差異相關的跨平臺回歸時,團隊有時會將條碼層遷移到在每個目標上都行為一致的單一受管理引擎。

文件上傳或 PDF 處理要求新增

移動應用程式通常以實時相機掃描作為唯一輸入方法開始,然後擴展至接受上傳圖像或文件。 當使用者需要從照片集中掃描條碼,從電子郵件收到的圖像中掃描條碼,或者從包含運送單或登機牌的 PDF 中掃描條碼時,BarcodeScanning.Native.Maui 沒有這些輸入的程式碼路徑。 達到這一需求邊界的團隊面臨一個選擇:在 BarcodeScanning.Native.Maui 旁邊新增第二個條碼庫用於文件和 PDF 輸入,或者遷移到能處理所有輸入型別的單一庫。管理具有不同 API 和結果型別的兩個條碼包增加的長期複雜性是單一包解決方案所避免的。

伺服器端條碼處理已被引入

在移動上掃描條碼的應用程式常常開發一個伺服器端組件——一個驗證條碼的 ASP.NET API 端點、處理 PDFs 的背景作業,或是從上傳文件中提取追蹤號的雲功能。 BarcodeScanning.Native.Maui 是一個 MAUI UI 控制庫; 它沒有伺服器端實現。 在移動和伺服器上需要相同條碼讀取邏輯的團隊必須在伺服器端使用不同的庫。當伺服器端需求來臨時,團隊經常評估將移動和伺服器都涵蓋的單一庫是否比維護兩個獨立的實現更可取。

UPC-A 資料標準化成為關注焦點

iOS 的 UPC-A 13 位行為並不總是在開發時被捕獲。 開發中掃描的 UPC-A 條碼可能看似工作正常,但 Visions 框架中缺少標準化的前導零可能會在資料庫中顯示。 發現庫存記錄、銷售點系統或供應鏈整合中的 13 位 UPC-A 值的團隊可能需要程式碼修正和資料糾正步驟。加入文件化的標準化後處理新的掃描; 有時候偏愛通過一致的 UPC-A 輸出的庫進行長期補救。

PDF417 文件掃瞄需求

PDF417 是北美運送標籤、駕駛執照和登機牌使用的條碼格式。 這些是物流、身份驗證和旅遊應用程式的常見掃描物件。 BarcodeScanning.Native.Maui 的 GitHub 問題跟蹤記錄 PDF417 作為"非常有問題——大多數掃描從未發生"在 iOS/Android 引擎上。 用於 PDF417 可靠性是功能需求的應用程式,團隊通常會評估其他庫。

常見的遷移考慮因素

相機事件轉換為 MediaPicker 和靜態讀取

遷移中的核心結構更改是用 MediaPicker 捕捉後的 BarcodeReader.Read() 取代連續的相機事件模式。 OnDetectionFinished 事件處理器、CameraView XAML 控制項和 scanner: XML 命名空間聲明全部被移除。 取而代之的是一個按鈕觸發 MediaPicker.CapturePhotoAsync(),並將結果照片位元組傳遞給 BarcodeReader.Read()。 這將使用者體驗從實時連續的取景器改為系統相機畫面——適用於大多數商務應用程式。

執行緒編織的變化

BarcodeScanning.Native.Maui在背景執行緒上觸發MainThread.BeginInvokeOnMainThread() 封裝其更新。IronBarcode所使用的 MediaPicker + async 模式中,await 之後的繼續回到呼叫上下文,通常是主執行緒。 在大多數情況下,MainThread.BeginInvokeOnMainThread() 封裝可被移除,簡化事件處理程式程式碼。

UPC-A 標準化移除

任何處理 BarcodeScanning.Native.Maui 的 iOS UPC-A 13 位行為的程式碼基礎將具有檢查 BarcodeFormats.Upca 和調用 Substring(1) 的程式碼,以去除前導零。 這一程式碼應於遷移後被移除——IronBarcode 返回標準的12位值,保持標準化將錯誤地從有效的UPC-A讀取中去掉第一位。

MAUI 許可權限

BarcodeScanning.Native.Maui 在其套件設置中自動將相機許可新增到 Android 和 iOS 應用程式。使用IronBarcode最優化 AndroidManifest.xmlInfo.plist 中的標準 MAUI 相機許可權都需要有——任何 MAUI 應用需要的相同許可。 這些許可是通常已經存在於任何使用相機的 MAUI 項目中。

額外的IronBarcode能力

除了本文比較中涵蓋的功能,IronBarcode 提供了 BarcodeScanning.Native.Maui 未觸及的功能:

  • 條碼生成 生成 Code128、QR、DataMatrix、PDF417 和其他格式作為 PNG、SVG 或字節陣列——可在 MAUI 的 UI、API 回應中,或用於列印標籤。
  • 生成 QR Code 建立樣式化的 QR 碼,支持標誌嵌入、顏色自定和錯誤校正級別控制。
  • 多條碼讀取 ExpectMultipleBarcodes 選項在單次通過中讀取圖像中存在的所有條碼。
  • PDF 條碼提取 直接讀取嵌入在 PDF 文件中的條碼——無需中間圖像轉換。
  • 伺服器端部署 在不需相機依賴的情況下,將相同的條碼讀取和生成邏輯部署在 ASP.NET、Azure Functions、Docker 和 AWS Lambda 中。
  • 讀取速度配置 ReadingSpeed.Faster, Balanced, DetailedExtremeDetail 設置允許根據圖像質量進行吞吐量與精確度之間的調整。
  • 伺服器和桌面的重用 相同的庫運行於 ASP.NET、控制台、WPF 和 WinForms 項目,因此條碼邏輯可以在 MAUI 客戶端與後台服務之間共享,無需第二個包。

.NET相容性和未來準備

IronBarcode 支持 .NET 6、.NET 7 和 .NET 8,以及 .NET Framework 4.6.2 及更高版本。 這意味著它在現代 .NET 目標上運行,並且在尚未遷移的傳統伺服器環境中運行。 BarcodeScanning.Native.Maui 是僅限 MAUI 的庫,無 .NET Framework 支持,沒有伺服器端部署路徑。 對於程式碼庫橫跨 MAUI 和現有 .NET Framework 或 .NET Core 伺服器應用程式的團隊來說,IronBarcode 提供了一致的 API 跨所有環境,無需為每個運行時上下文提供單獨的條碼包。

結論

BarcodeScanning.Native.Maui 與IronBarcode解決不同的問題。 BarcodeScanning.Native.Maui 是一個相機控制庫,為 MAUI 目標提供實時觀景窗與自動條碼檢測,將識別委託給三個不同的平臺引擎。IronBarcode是一個條碼讀取和生成庫,通過 .NET 目標中的單一受管理引擎處理來自任何來源的靜態圖像資料。 架構上的差異——連續相機流與離散資料輸入——決定了哪個庫適合給定的需求設置。

當應用是 MAUI 應用,需要實時應用中相機預覽與連續幀檢測作為所需 UX 模式,並且需求不會擴展包含文件上傳、PDF 處理或伺服器端條碼工作時,BarcodeScanning.Native.Maui 是正確的選擇。 在此範圍內它是免費的,簡約且功能實用。

當條碼輸入來自文件、PDF 或字節陣列,而不一定是實時相機時;當伺服器端條碼處理是架構中的一部分時;或當條碼生成與讀取同樣是需要時,IronBarcode 是正確的選擇。 當跨平臺穩定的解碼行為或 PDF417 可靠性是生產需求時,它也是合適的。 商業許可的成本是這些能力的折中。

對於當前需求符合 BarcodeScanning.Native.Maui的團隊來說,這個庫是合理且經濟的選擇。對於需求已經遠超或預期會超過實時相機掃描的團隊而言,IronBarcode 在輸入型別、平臺和部署目標之間提供一致的 API 是一個實際的選擇。

常見問題

什麼是 BarcodeScanning.MAUI?

BarcodeScanning.MAUI 是一個 .NET 條碼程式庫,用於在 C# 應用程式中生成和讀取條碼。這是開發人員在選擇 .NET 專案的條碼解決方案時評估的幾種替代方案之一。

BarcodeScanning.MAUI 和 IronBarcode 之間的主要區別是什麼?

IronBarcode 使用靜態、無狀態的 API,無需實例管理,而 BarcodeScanning.MAUI 通常需要在使用之前建立和配置實例。IronBarcode 還提供原生 PDF 支援、自動格式檢測以及在所有環境中的單鍵授權。

IronBarcode 比 BarcodeScanning.MAUI 更容易獲得授權嗎?

IronBarcode使用一個覆蓋開發和生產部署的單一授權金鑰。相比於將SDK金鑰與運行時金鑰分開的授權系統,這簡化了CI/CD管道和Docker配置。

IronBarcode 支援 BarcodeScanning.MAUI 支援的所有條碼格式嗎?

IronBarcode支持超過30種條碼符號,包括QR Code、Code 128、Code 39、DataMatrix、PDF417、Aztec、EAN-13、UPC-A、GS1等。格式自動檢測意味著不需要顯式的格式枚舉。

IronBarcode支持原生PDF條碼讀取嗎?

是的。IronBarcode可以直接從PDF文件中讀取條碼,使用BarcodeReader.Read("document.pdf"),無需單獨的PDF渲染程式庫。每頁結果包括頁碼、條碼格式、值和置信分數。

IronBarcode 如何處理與 BarcodeScanning.MAUI 相比的批量處理?

IronBarcode的靜態方法無狀態且天然執行緒安全,可以直接使用Parallel.ForEach而無需每個執行緒的實例管理。任何價格級別下都沒有吞吐量上限。

IronBarcode支持哪些.NET版本?

IronBarcode支持.NET Framework 4.6.2+、.NET Core 3.1,以及.NET 5、6、7、8和9,單一NuGet包。平台目標包括Windows x64/x86、Linux x64和macOS x64/ARM。

如何在.NET專案中安裝IronBarcode?

通過NuGet安裝IronBarcode:在Package Manager Console中運行 'Install-Package IronBarCode',或在CLI中運行 'dotnet add package IronBarCode'。不需要額外的SDK安裝程式或運行時文件。

與 BarcodeScanning.MAUI 不同,我可以在購買前評估 IronBarcode 嗎?

可以。IronBarcode的試用模式返回完整解碼的條碼值——只有生成的輸出圖像上有水印。您可以在自己的文件上評估讀取準確性,然後再決定購買。

BarcodeScanning.MAUI 和 IronBarcode 之間的價格差異是什麼?

IronBarcode起價為$749,為單開發者所適用的永久授權,覆蓋開發和生產。價格詳情和批量選項可在IronBarcode授權頁面獲得。無需單獨的運行時授權。

從 BarcodeScanning.MAUI 遷移到 IronBarcode 是否簡單直接?

從 BarcodeScanning.MAUI 遷移到 IronBarcode 主要涉及用 IronBarcode 的靜態方法替換實例為基礎的 API 呼叫,移除授權樣板,並更新結果屬性名稱。大多數遷移涉及減少程式碼而不是增加。

IronBarcode可以生成帶有Logo的QR碼嗎?

可以。QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png") 可以原生嵌入品牌圖像進QR碼,並可配置錯誤更正。也支持通過ChangeBarCodeColor() 生成彩色QR碼。

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話