跳過到頁腳內容
與其他組件的比較

BarcodeScanning.MAUI 與 IronBarcode:C# 條碼庫比較

BarcodeScanning.Native.Maui 是一個相機插件,而不是條碼庫。 如果你的應用程式運行在 Windows 系統上,處理上傳的文件,或者從 PDF 文件中讀取條碼,那麼它就是錯誤的工具——而 README 文件並沒有事先明確說明這一點。 該軟體包頁面將其描述為".NET MAUI 的條碼掃描庫",這在技術上是準確的,但忽略了一個關鍵的限制:它是一個 CameraView 控件,當條碼進入實時相機幀時會觸發一個事件。 這就是全部功能了。 本文比較了相機控制庫和功能齊全的條碼 SDK 之間的架構差異,幫助團隊了解每種工具的適用範圍和不足之處。

了解條碼掃描。 MAUI

BarcodeScanning.Native.Maui 將 iOS(Apple 的 Vision 框架)和 Android(ML Kit)上的原生相機條碼偵測 API 封裝到 MAUI CameraView 控制項中。 開發人員將控制項放入 XAML 頁面中,連接事件處理程序,每當在即時攝影機畫面中偵測到條碼時,函式庫都會觸發該事件。 整個互動模型是攝影機進入,事件輸出——沒有其他路徑。

該庫是開源的,並根據 MIT 許可證免費提供。 它的設計目標明確而具體:以盡可能少的 API 介面為 iOS 和 Android MAUI 應用程式提供即時攝影機頭條碼偵測。 它透過委託給原生平台 API 來實現這一目標,而不是實現自己的條碼解碼引擎。

BarcodeScanning.Native.Maui 的主要架構特徵:

-僅相機輸入:該庫僅接受即時相機幀。 公共 API 中任何地方都沒有 ReadFromFile()ReadFromBytes()ReadFromStream()ReadFromPdf() 方法。 -僅限 iOS 和 Android:此程式庫封裝了 iOS 特有的(Vision 框架)和 Android 特有的(ML Kit)原生 API。 MAUI 目前沒有 Windows 目標平台的實現,也沒有相關計畫。 -無產生功能: BarcodeScanning.Native.Maui 從相機幀中讀取條碼。 它無法產生任何格式的條碼。

  • iOS UPC-A 不準確: Apple 的 Vision 框架為 UPC-A 條碼返回 13 位數字(在前面加上一個零以匹配 EAN-13 編碼)。 這個函式庫會直接傳遞這個原始值而不進行任何修正,因此需要在應用程式程式碼中進行手動變通處理。
  • PDF417 可靠性已知問題:該庫自己的 GitHub 問題追蹤器記錄 PDF417 掃描"非常成問題——大多數掃描根本不會發生",這直接阻礙了貨運標籤、駕駛執照和登機證的掃描。 -最小公共接口:公共 API 由 CameraViewOnDetectionFinishedOnDetectionFinishedEventArgsBarcodeResult 以及 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, OnDetectionFinishedEventArgs e)
{
    var barcode = e.BarcodeResults.FirstOrDefault();
    if (barcode != null)
        ResultLabel.Text = barcode.DisplayValue;
}
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArgs e)
{
    var barcode = e.BarcodeResults.FirstOrDefault();
    if (barcode != null)
        ResultLabel.Text = barcode.DisplayValue;
}
Private Sub OnBarcodeDetected(sender As Object, e As OnDetectionFinishedEventArgs)
    Dim barcode = e.BarcodeResults.FirstOrDefault()
    If barcode IsNot Nothing Then
        ResultLabel.Text = barcode.DisplayValue
    End If
End Sub
$vbLabelText   $csharpLabel

此控制項為使用者提供了一個嵌入在 MAUI 頁面中的即時取景器。 當攝影機畫面處於活動狀態時,條碼偵測會持續觸發。對於以"指向掃描"為主要互動方式的消費級應用來說,這種使用者體驗確實非常出色。 限制在於,這是該庫唯一支援的互動方式——一旦需求超出 iOS 或 Android 上的即時相機偵測範圍,BarcodeScanning.Native.Maui 就無法提供任何功能。

了解 IronBarcode

IronBarcode 是一個用於 .NET 的商業條碼讀取和生成庫,它是基於資料輸入而不是相機流進行操作。 它可以讀取圖像檔案、位元組數組、資料流和 PDF 文件中的條碼。 在 MAUI 系統中,它透過 MediaPicker 與系統攝影機整合——這是應用程式用於照片選擇的相同標準 MAUI API——捕獲照片,然後將生成的圖像作為靜態輸入進行處理。

IronBarcode 自行實現了條碼解碼引擎,而不是依賴平台特定的原生 API。這意味著同一個 BarcodeReader.Read() 呼叫在 iOS、Android、Windows、macOS、ASP.NET 和後台伺服器進程中都能保持一致的行為。 本函式庫也透過 BarcodeWriterQRCodeWriter 提供完整的條碼產生 API。

IronBarcode的主要特點:

-靜態檔案 API: BarcodeReader.Read() 接受檔案路徑、位元組陣列、流或 PDF — 任何靜態資料來源。 -全面覆蓋平台:支援 iOS、Android、Windows 和 macOS MAUI 目標平台。 相同的程式碼可以在所有四個平台上運行,無需針對特定平台進行分支。 -條碼產生: BarcodeWriter.CreateBarcode()QRCodeWriter.CreateQrCode() 產生 Code128、QR、DataMatrix 和其他格式的圖片檔案或位元組陣列。

  • PDF 支援:直接讀取嵌入在 PDF 文件中的條碼,無需中間影像擷取步驟。 -精確的 UPC-A 解碼:傳回正確的 12 位元 UPC-A 值,無需手動規範化變通方法。 -商業許可: Lite 版 749 美元,Plus 版 1499 美元,Professional 版 2999 美元,Unlimited 版 5999 美元——永久許可,含一年支持。 -伺服器端部署:可在 ASP.NET、Azure Functions、Docker 容器和 AWS Lambda 中運行,不依賴實體攝影機等平台。

功能比較

下表列出了 BarcodeScanning.Native.Maui 和IronBarcode之間的根本差異:

特點 BarcodeScanning.MAUI IronBarcode
主要目的 即時攝影頭條碼偵測 從任何資料來源讀取和產生條碼
輸入來源 僅即時攝影機畫面 文件、位元組數組、流、PDF
平台支援 iOS 和 Android MAUI 系統 iOS、Android、Windows、macOS MAUI + 伺服器端
條碼生成 是的-條碼寫入器 + 二維碼寫入器
授權模式 MIT(免費、開放原始碼) 商業版-精簡版 749 美元,無限版 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 選項)
閱讀速度控制 ReadingSpeed.Balanced / Faster / Slower
iOS 上的 UPC-A 準確性 傳回 13 位數字(錯誤),需要手動規範化 傳回正確的 12 位元 UPC-A
PDF417 可靠性 "大多數掃描從未發生"(GitHub 問題) 支援
世代
條碼生成 是的 — BarcodeWriter.CreateBarcode()
二維碼生成 是的 — QRCodeWriter.CreateQrCode()
輸出格式為 PNG / 位元組數組
平台
iOS 主介面
Android MAUI
Windows MAUI
macOS MAUI 未記錄。
ASP.NET/伺服器端
Docker / Azure / AWS Lambda
.NET Framework 支持 不(僅限毛伊島) 是的-.NET Framework 4.6.2+
授權
許可證類型 麻省理工學院(開源) 商業永久
成本 自由的 Lite版 749美元,Plus版 1499美元,Professional版 2999美元,Unlimited版 5999美元
評估模式 不適用 免費試用

架構:相機控制與檔案處理 API

這兩個庫最根本的差別在於輸入模型。 BarcodeScanning.Native.Maui 是圍繞連續攝影機流設計的;IronBarcode的設計是圍繞著離散資料輸入的。 這些並不是同一理念的不同實現方式——它們是針對不同用例的不同架構選擇。

條碼掃描.MAUI 方法

BarcodeScanning.Native.Maui 封裝了每個平台上的原生攝影機偵測流程。 在 Android 系統上,ML Kit 處理幀。 在 iOS 系統中,蘋果的 Vision 框架負責處理幀。 該庫將其顯示為 MAUI CameraView 控件,並帶有 OnDetectionFinished 事件。 應用程式程式碼從不直接處理圖像位元組——它只處理從事件中偵測到的條碼值。

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

這種設計的後果是,沒有其他入口。 相機並非可選項——它是庫唯一識別的輸入裝置。 伺服器、文件、PDF、Windows 機器——這些都沒有該庫所期望的那種相機。

IronBarcode方法

IronBarcode 透過其靜態方法接收影像資料。 呼叫者提供數據(來自任何來源),庫對其進行解碼。 在 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

這段程式碼在 iOS、Android 和 Windows MAUI 上運作效果完全相同。 對於伺服器端使用,相同的 BarcodeReader.Read() 方法接受上傳檔案的位元組陣列或 PDF 路徑。 IronBarcode 的文檔涵蓋了所有支援的輸入類型。

平台覆蓋範圍和 Windows 支持

對於建立 MAUI 應用程式的團隊來說,平台覆蓋範圍是 BarcodeScanning.Native.Maui 的結構性限制具體體現出來的地方。

條碼掃描.MAUI 方法

BarcodeScanning.Native.Maui 不支援 MAUI 中的 Windows 目標平台。 這不是暫時的缺口,而是圖書館建築結構造成的必然結果。 該程式庫封裝了 iOS 特有的(Vision 框架)和 Android 特有的(ML Kit)原生 API。 Windows 系統本身不具備這兩種 API。 建立面向 iOS、Android 和 Windows 的 MAUI 應用程式的團隊(這是標準的多目標場景)不能使用 BarcodeScanning.Native.Maui 作為所有三個目標的條碼解決方案。 他們要么必須單獨為 Windows 平台編寫特定程式碼,要么必須完全替換該程式庫。

IronBarcode方法

IronBarcode 的 BarcodeReader.Read() 呼叫可在 Windows、iOS、Android 和 macOS 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 中的兩個特定格式準確性問題會對生產應用程式產生直接影響。

條碼掃描.MAUI 方法

在 iOS 上,BarcodeScanning.Native.Maui 的底層偵測(Apple Vision)會為 UPC-A 條碼傳回 13 位數。 UPC-A 是一種 12 位數格式; 多出的開頭零符合 EAN-13 編碼。 庫會直接傳遞這個原始值,而不進行任何校正。 將 UPC-A 值儲存在資料庫中的應用程式可能會累積一些記錄,這些記錄中存在不應該存在的前導零。

已記錄的解決方法是檢查格式並裁剪值:

// Workaround required for iOS UPC-A — strip the leading zero manually
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArgs e)
{
    var barcode = e.BarcodeResults.FirstOrDefault();
    if (barcode == null) return;

    var value = barcode.DisplayValue;
    if (barcode.BarcodeFormat == BarcodeFormat.UPC_A && value.Length == 13)
        value = value.Substring(1); // strip Apple's prepended leading zero

    ProcessBarcode(value);
}
// Workaround required for iOS UPC-A — strip the leading zero manually
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArgs e)
{
    var barcode = e.BarcodeResults.FirstOrDefault();
    if (barcode == null) return;

    var value = barcode.DisplayValue;
    if (barcode.BarcodeFormat == BarcodeFormat.UPC_A && value.Length == 13)
        value = value.Substring(1); // strip Apple's prepended leading zero

    ProcessBarcode(value);
}
' Workaround required for iOS UPC-A — strip the leading zero manually
Private Sub OnBarcodeDetected(sender As Object, e As OnDetectionFinishedEventArgs)
    Dim barcode = e.BarcodeResults.FirstOrDefault()
    If barcode Is Nothing Then Return

    Dim value = barcode.DisplayValue
    If barcode.BarcodeFormat = BarcodeFormat.UPC_A AndAlso value.Length = 13 Then
        value = value.Substring(1) ' strip Apple's prepended leading zero
    End If

    ProcessBarcode(value)
End Sub
$vbLabelText   $csharpLabel

如果省略格式檢查,這種變通方法會悄悄地破壞以 0 開頭的 EAN-13 條碼。 PDF417 在 GitHub issues 中被單獨記錄為"非常有問題——大多數掃描都不會發生",影響貨運標籤、駕駛執照和登機證。

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 的正確格式處理消除了 BarcodeScanning.Native.Maui 在應用程式程式碼中留下的一類生產錯誤。 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() 呼叫
僅限 iOS 和 Android iOS、Android、Windows、macOS (MAUI) + ASP.NET、桌面
僅相機幀 文件、位元組數組、流、PDF
無文件/PDF API BarcodeReader.Read(path) — 接受影像檔案與 PDF 文件
適用於左側 Windows 系統 完全支援 Windows MAUI
無生成 API BarcodeWriter.CreateBarcode() + QRCodeWriter.CreateQrCode()

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

已將 Windows MAUI 目標新增至建置中

MAUI 應用程式通常以 iOS 和 Android 為目標平台,隨著應用程式的成熟或企業分發需求的擴展,再逐步加入 Windows 版本。 在新增 Windows 目標後,BarcodeScanning.Native.Maui 會立即成為一個阻礙因素——庫中沒有 Windows 實現,也沒有解決方法。 在這種情況下,團隊要么必須使用不同的庫為 Windows 維護單獨的條碼實現,要么必須將整個條碼層遷移到一個可以在所有 MAUI 目標上一致工作的庫。 第二條路徑操作起來更簡單,並且消除了平台特定分支的維護開銷。

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

行動應用程式通常最初以即時攝影機掃描作為唯一的輸入方式,之後才擴展到接受上傳的影像或文件。 當使用者需要掃描圖庫中的照片、透過電子郵件收到的圖像或包含貨運清單或登機證的 PDF 中的條碼時,BarcodeScanning.Native.Maui 沒有可提供的程式碼路徑。 達到此需求閾值的團隊面臨一個選擇:要么在 BarcodeScanning.Native.Maui 之外再添加一個條碼庫來處理文件和 PDF 輸入,要么遷移到一個能夠處理所有輸入類型的單一庫。管理兩個具有不同 API、不同結果類型和不同格式支援表的條碼包會增加長期的複雜性,而單一套件解決方案則可以避免這一點。

伺服器端條碼處理技術推出

在行動裝置上掃描條碼的應用程式通常會開發一個伺服器端元件——一個用於驗證條碼的 ASP.NET API 端點、一個用於處理 PDF 的後台作業,或一個用於從上傳的文件中提取追蹤號碼的雲端函數。 BarcodeScanning.Native.Maui 是一個依賴相機硬體上下文的 UI 控制庫; 它無法在伺服器進程中運行。 如果團隊需要在行動端和伺服器端使用相同的條碼讀取邏輯,則伺服器端必須使用不同的函式庫。當出現伺服器端需求時,團隊通常會評估是使用同時涵蓋行動端和伺服器端的單一函式庫,還是維護兩個獨立的實作更可取。

UPC-A 數據準確性成為生產問題

iOS UPC-A 13 位數的行為並非總是能在開發過程中被發現。 在開發過程中掃描的 UPC-A 條碼可能看起來運作正常,但 Apple 的 Vision 框架引入的前導零會出現在資料庫中。 在庫存記錄、銷售點系統或供應鏈整合中發現 13 位元 UPC-A 值的團隊,除了面臨程式碼問題外,還面臨資料修正問題。 BarcodeScanning.Native.Maui 的 GitHub 問題中記錄的解決方法可以修正新的掃描結果,但無法修復歷史資料。 當資料品質問題的範圍變得明確時,遷移到無需應用級規範化即可返回正確 UPC-A 值的庫通常是更清晰的長期解決方案。

PDF417 文件掃描要求

PDF417 是北美地區用於貨運標籤、駕駛執照和登機證的條碼格式。 這些是物流、身分驗證和旅遊應用中常見的掃描目標。 BarcodeScanning.Native.Maui 的 GitHub 問題追蹤器將 PDF417 描述為"問題重重——大多數掃描都無法成功"。對於任何將 PDF417 的可靠性視為功能性要求而非錦上添花的應用來說,這個已知問題會直接阻礙應用的運行,迫使開發者評估其他替代庫。

常見的遷移考量

相機事件到媒體選擇器和靜態讀取

遷移的核心結構變化是用 MediaPicker 捕獲後緊接著 BarcodeReader.Read() 捕獲來取代連續的相機事件模式。 事件處理程序、XAML 控制項和 XML 命名空間聲明均已移除。 取而代之的是,一個按鈕觸發 MediaPicker.CapturePhotoAsync(),並將產生的照片位元組傳遞給 BarcodeReader.Read()。 這會將使用者體驗從即時連續取景器變為系統相機螢幕—適用於大多數商業應用。

線程編組變更

BarcodeScanning.Native.Maui 在後台執行緒中觸發 OnDetectionFinished,因此所有更新 UI 元素的現有處理程序都會將其更新包裝在 MainThread.BeginInvokeOnMainThread() 中。IronBarcode所使用的 MediaPicker + async 模式,在 await 之後的延續會在呼叫上下文中傳回,這通常是主執行緒。 大多數情況下,可以刪除 MainThread.BeginInvokeOnMainThread() 包裝器,從而簡化事件處理程序程式碼。

UPC-A 規避移除

任何處理 BarcodeScanning.Native.Maui 的 iOS UPC-A 13 位元行為的程式碼庫都會有程式碼檢查 BarcodeFormat.UPC_A 並呼叫 Substring(1) 來移除前導零。 遷移後必須刪除此程式碼 —IronBarcode傳回正確的 12 位元值,保留此變通方法會錯誤地從有效的 UPC-A 讀取中移除第一位數字。

MAUI權限

BarcodeScanning.Native.Maui 會在其軟體包設定過程中自動為 Android 和 iOS 清單新增相機權限。當IronBarcode使用 MediaPicker 時,需要 AndroidManifest.xmlInfo.plist 中的標準 MAUI 相機權限-這與任何 MAUI 應用在 MediaPicker.CapturePhotoAsync()@ 中所需的權限相同。 這些權限通常已存在於使用攝影機的 MAUI 專案中,無論專案用途如何。

IronBarcode的其他功能

除了本次對比中涵蓋的功能之外,IronBarcode 還提供了一些 BarcodeScanning.Native.Maui 在任何層面上都未涉及的功能:

-條碼產生產生 Code128、QR、DataMatrix、PDF417 和其他格式的 PNG、SVG 或位元組陣列-可在 MAUI UI、API 回應或列印標籤中使用。 -產生二維碼建立具有徽標嵌入、顏色自訂和糾錯等級控制的樣式二維碼。 -多條碼讀取 ExpectMultipleBarcodes 選項一次讀取單一影像中存在的所有條碼。

  • PDF 條碼擷取直接讀取嵌入在 PDF 文件中的條碼-無需中間影像轉換。 -伺服器端部署在 ASP.NET、Azure Functions、Docker 和 AWS Lambda 中部署相同的條碼讀取和產生邏輯,而無需任何相機相依性。 -讀取速度配置 ReadingSpeed.FasterBalancedSlower 設定允許根據影像品質調整吞吐量與準確性。
  • macOS MAUI 支援全面支援 macOS MAUI 桌面應用程序,涵蓋 BarcodeScanning.Native.Maui 未記錄的第四個 MAUI 目標。

.NET相容性與未來準備

IronBarcode 支援 .NET 6、.NET 7、.NET 8 和 .NET 9,以及 .NET Framework 4.6.2 及更高版本。 這意味著它既可以在完整的 MAUI 目標集上運行,也可以在尚未遷移到現代 .NET 的舊式伺服器環境中運行。IronBarcode會定期更新,並隨著 2026 年 .NET 10 的普及而保持相容。 BarcodeScanning.Native.Maui 是一個僅限 MAUI 使用的函式庫,不支援 .NET Framework,也沒有伺服器端部署路徑。 對於程式碼庫同時涵蓋 MAUI 和現有 .NET Framework 或 .NET Core 伺服器應用程式的團隊,IronBarcode 提供跨所有環境的一致 API,而無需為每個執行時間上下文單獨準備條碼包。

結論

BarcodeScanning.Native.Maui 和IronBarcode解決的是不同的問題。 BarcodeScanning.Native.Maui 是一個相機控制庫,可在 iOS 和 Android 上提供即時取景器和自動條碼偵測功能。IronBarcode是一個條碼讀取和生成庫,可處理來自任何來源的靜態圖像數據,並支援所有 .NET 平台。 架構上的差異——連續的攝影機流與離散的資料輸入——決定了哪個庫適合給定的需求集。

當應用程式是僅面向 iOS 和 Android 的消費者行動應用程序,並且需要使用連續幀檢測的即時應用內相機預覽作為 UX 模式,並且需求不會擴展到包括 Windows、文件上傳、PDF 處理或伺服器端條碼工作時,BarcodeScanning.Native.Maui 是正確的選擇。 在這個限定範圍內,它是自由的、簡潔的、功能性的。

當平台覆蓋範圍必須包括 Windows MAUI,當條碼輸入除了即時攝影機之外或取代即時攝影機之外還來自檔案、PDF 或位元組數組,當伺服器端條碼處理是架構的一部分,或者當需要產生條碼以及讀取條碼時,IronBarcode 是正確的選擇。 當 UPC-A 精度或 PDF417 可靠性是生產要求而不是可接受的限制時,這種方法也是合適的。 商業許可費用是獲得這些功能的必要代價。

對於目前需求僅限於 BarcodeScanning.Native.Maui 函式庫的團隊而言,該函式庫是合理且經濟高效的選擇。但對於那些需求已經或預計會擴展到兩個平台上即時攝影機掃描之外的團隊而言,與 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 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 在單一 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 安裝程式或運行時檔案。

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

是的。 IronBarcode 的試用模式會傳回完整的解碼條碼值-只有產生的輸出影像才會有浮水印。您可以在購買前,用自己的文件測試讀取準確率。

BarcodeScanning.MAUI 和 IronBarcode 的價格有什麼不同?

IronBarcode 的永久單開發者許可證起價為 749 美元,涵蓋開發和生產環境。定價詳情和大量許可選項請造訪 IronBarcode 授權頁面。無需單獨的運行時許可證。

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

從 BarcodeScanning.MAUI 遷移到 IronBarcode 主要涉及將基於實例的 API 呼叫替換為 IronBarcode 的靜態方法、移除許可相關的樣板程式碼以及更新結果屬性名稱。大多數遷移都是減少程式碼,而不是增加程式碼。

IronBarcode 能產生帶有 logo 的二維碼嗎?

是的。 `QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png")` 可以將品牌圖片原生嵌入二維碼中,並支援設定糾錯功能。此外,它還支援透過 `ChangeBarCodeColor()` 函數建立彩色二維碼。

Jordi Bardia
軟體工程師
Jordi 在 Python、C# 和 C++ 上最得心應手,當他不在 Iron Software 展現技術時,便在做遊戲編程。在分担產品测测试,產品開發和研究的责任時,Jordi 為持续的產品改進增值。他说这种多样化的经验使他受到挑战并保持参与, 而这也是他与 Iron Software 中工作一大乐趣。Jordi 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。

鋼鐵支援團隊

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