Barcode4.NET vs IronBarcode:C#バーコードライブラリの比較
BarcodeScanning.Native.Maui vs IronBarcode: カメラ制御 vs フルバーコードSDK
BarcodeScanning.Native.MauiはMAUIアプリケーションに特化したカメラプラグインです。 アップロードされたファイルを処理したり、PDFからバーコードを読み取るアプリケーションである場合、その利用ケースには設計されていません。 このパッケージは".NET MAUI用のバーコードスキャンライブラリ"と自らを説明し、実際にはライブカメラフレームにバーコードが入るとイベントを発生させるCameraViewコントロールです。 これが全機能です。 この比較では、カメラコントロールライブラリとフル機能のバーコードSDKの間のアーキテクチャの違いを検討し、チームがそれぞれのツールがどこに適しているかを理解するのを助けます。
バーコードスキャンについて理解する。MAUI
BarcodeScanning.Native.Mauiは、iOS/macOS(AppleのVisionフレームワーク)、Android(Google ML Kit)、Windows(バージョン3.0.1で追加されたZXingCpp)のネイティブカメラバーコード検出APIをMAUIのCameraViewコントロールにラップします。 開発者はコントロールをXAMLページに配置し、イベントハンドラーを設定すると、ライブラリはライブカメラの映像でバーコードが検出されるたびにそのイベントを発生させます。 インタラクションモデル全体は、カメラ入力、イベント出力という方式であり、それ以外の経路は存在しない。
このライブラリはオープンソースであり、MITライセンスの下で無料で利用できます。 その設計目標は狭く明確です:最低限のAPIサーフェスでMAUIアプリケーションのためのライブカメラバーコード検出を提供します。 独自のデコードエンジンを実装するのではなく、プラットフォームごとのネイティブエンジンへの委任を通じてその目標を達成しています。
BarcodeScanning.Native.Maui の主なアーキテクチャ特性:
-カメラのみの入力:このライブラリは、ライブカメラフレームのみを受け付けます。 パブリックAPIにはReadFromPdf()メソッドはありません。
- MAUI専用ターゲット: ライブラリはiOS、Android、Windows(バージョン3.0.1以降、ZXingCpp経由)、およびmacOS CatalystのMAUIターゲットをサポートしています。MAUIプロジェクト以外では使用できません(ASP.NET、コンソール、WPF、WinFormsなし)。
- 3つの異なるエンジン: iOS/macOSはApple Vision、AndroidはGoogle ML Kit、WindowsはZXingCpp 3つのエンジン間でシンボロジーカバレッジとデコード動作に違いがあります。 -生成機能なし: BarcodeScanning.Native.Maui はカメラフレームからバーコードを読み取ります。 いかなる形式のバーコードも生成できません。
- iOS UPC-A quirks: AppleのVisionフレームワークは、UPC-Aバーコードに対して(EAN-13エンコーディングとの整合性を図るために先頭にゼロを付加して)13桁を返すことがあります。 ライブラリはこの生データをそのまま通し、アプリケーションが必要に応じて正規化します。
- PDF417の信頼性(iOS/Android): ライブラリのGitHubイシュートラッカーは、Vision / ML Kitコードパス上でPDF417スキャンを"非常に問題がある、多くのスキャンは決して起こらない"と説明しています。これらは送り状、運転免許証、搭乗券に関連しています。
- 最小限のパブリック表面: パブリックAPIは
BarcodeFormatで構成されています。 それが、アプリケーションコードがやり取りする対象の全てです。 - 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" />
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
このコントロールにより、ユーザーはMAUIページに埋め込まれたリアルタイムのビューファインダーを利用できるようになります。 カメラフィードがアクティブな限り、バーコード検出は継続的に発生します。このユーザーエクスペリエンスは、"ポイントしてスキャン"が主なインタラクションである消費者向けアプリに適しています。 このライブラリがサポートする唯一のインタラクションが制約条件です。MAUIコンテキストでのライブカメラ検出を超える要件は、範囲外となります。
IronBarcodeを理解する
IronBarcodeは、カメラのストリームではなくデータ入力に基づいて動作する、 .NET向けの商用バーコード読み取りおよび生成ライブラリです。 画像ファイル、バイト配列、ストリーム、およびPDFドキュメントからバーコードを読み取ります。 MAUIでは、システムカメラとMediaPickerを通じて統合されます。これは写真選択にアプリケーションが使用するのと同じ標準的なMAUI APIであり、写真をキャプチャし、結果のイメージを静的入力として処理します。
IronBarcodeは、プラットフォームごとのネイティブAPIに依存せず、独自のマネージドバーコードデコーディングエンジンを実装しています。これにより、同じBarcodeReader.Read()呼び出しがサポートされている.NETターゲット(Windows、Linux、macOS、ASP.NET、バックグラウンドサーバー処理)やMAUIモバイルターゲットで画像をキャプチャしてリーダーに渡す際に、一貫した動作を示します。 ライブラリはQRCodeWriterを通じて、完全なバーコード生成APIも提供します。
IronBarcodeの主な特徴:
- 静的ファイルベースのAPI:
BarcodeReader.Read()は、ファイルパス、バイト配列、ストリーム、PDFなど、あらゆる静的データソースを受け入れます。 - 広範なプラットフォームカバレッジ: Windows、Linux、macOS(ARMを含む)に加え、.NET Framework 4.6.2以上、.NET Core 3.1以上、.NET 5/6/7/8がサポートされ、すべてのサポート対象でプラットフォーム固有のブランチングなしで同じ管理されたコードパスが実行されます。
- バーコード生成:
QRCodeWriter.CreateQrCode()は、Code128、QR、DataMatrixなどのフォーマットを画像ファイルまたはバイト配列として生成します。 - PDF対応: PDF文書に埋め込まれたバーコードは、中間的な画像抽出ステップを経ることなく直接読み取られます。
- 一貫したUPC-Aデコード: 管理エンジンを通じて標準の12桁のUPC-A値を返します。 -商用ライセンス: Lite 749ドル、 Plus 1,499ドル、 Professional 2,999ドル、Unlimited 5,999ドル — 1年間のサポート付き永久ライセンス。 -サーバーサイド展開: ASP.NET、Azure Functions、Dockerコンテナ、AWS Lambdaで動作し、物理カメラへのプラットフォーム依存はありません。
機能比較
以下の表は、BarcodeScanning.Native.MauiとIronBarcodeの基本的な違いをまとめたものです。
| フィーチャー | BarcodeScanning.MAUI | IronBarcode |
|---|---|---|
| 主な目的 | ライブカメラのバーコード検出 | あらゆるデータソースからのバーコードの読み取りと生成 |
| 入力ソース | ライブカメラのフレームのみ | ファイル、バイト配列、ストリーム、PDF |
| プラットフォームサポート | MAUI のみ — iOS、Android、Windows(ZXingCpp経由)、macOS Catalyst | Windows、Linux、macOS、ASP.NET、コンソール、WPF、そしてキャプチャされた画像を介してMAUI |
| 認識エンジン | 3つのエンジン (Apple Vision / Google ML Kit / ZXingCpp) | すべてのターゲットで1つの管理エンジン |
| バーコード生成 | なし | はい — BarcodeWriter + QRCodeWriter |
| ライセンスモデル | MIT(無料、オープンソース) | 商用プラン -Lite749ドル~無制限プラン 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) | はい (キャプチャされた画像を介して) |
| アンドロイド MAUI | はい (Google ML Kit) | はい (キャプチャされた画像を介して) |
| Windows MAUI | はい (ZXingCpp, バージョン 3.0.1 以降) | はい |
| macOS MAUI | はい (Mac Catalyst, Apple Vision) | はい |
| ASP.NET / サーバーサイド | なし | はい |
| Docker / Azure / AWS Lambda | なし | はい |
| .NET Frameworkのサポート | いいえ(マウイ島のみ) | はい — .NET Framework 4.6.2以降 |
| ライセンスについて | ||
| ライセンスの種類 | MIT(オープンソース) | 商用永久 |
| コスト | 無料 | Lite: 749ドル、Plus: 1,499ドル、Professionalプラン:2,999ドル、アンリミテッドプラン:5,999ドル |
| 評価モード | 該当なし | 無料トライアルあり |
アーキテクチャ:カメラ制御とファイル処理APIの比較
これら2つのライブラリの最も根本的な違いは、入力モデルです。 BarcodeScanning.Native.Mauiは、連続的なカメラストリームを中心に設計されています。 IronBarcodeは、離散的なデータ入力を前提として設計されています。 これらは同じアイデアを競合的に実装したものではなく、異なるユースケースに対応した異なるアーキテクチャ上の選択肢である。
バーコードスキャン。MAUIアプローチ
BarcodeScanning.Native.Mauiは、各プラットフォームのネイティブカメラ検出パイプラインをラップします。 Androidでは、MLキットがフレームを処理します; iOSとmacOSでは、AppleのVisionフレームワークがフレームを処理します; Windowsでは、ZXingCppがフレームを処理します。 ライブラリは、MAUI 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
この設計の結果、他に侵入経路は存在しない。 カメラは必須です。図書館が認識する唯一の入力機器です。 サーバー、ファイル、PDF、または任意の非MAUIホストはライブラリに移行するパスがありません。
IronBarcodeのアプローチ
IronBarcodeは、BarcodeReader.Read()静的メソッドを通じて画像データを受け取ります。 呼び出し元はあらゆるソースからデータを提供し、ライブラリがそれをデコードする。 MAUIでは、データはMediaPickerから来ます; サーバー上では、フォームアップロードによって取得されます。 デスクトップアプリケーションでは、ファイルダイアログから取得されます。
// IronBarcode in 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;
}
// IronBarcode in 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
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
このコードは、画像をキャプチャできるMAUIターゲット全体で同じように動作します。 サーバー側で使用する場合、同じBarcodeReader.Read()メソッドはアップロードされたファイルのバイト配列またはPDFパスを受け入れます。 IronBarcodeのドキュメントには、サポートされているすべての入力タイプが記載されています。
プラットフォームカバレッジと認識エンジン
プラットフォームカバレッジは、MAUIアプリケーションを構築するチームにとって重要であり、バーコードロジックを非MAUIプロジェクトと共有する必要がある場合があります。
バーコードスキャン。MAUIアプローチ
BarcodeScanning.Native.MauiはMAUIターゲットの4つすべて(iOS、Android、Windowsバージョン3.0.1以降、macOS Catalyst)をサポートしていますが、ターゲットごとに異なる認識エンジンを使用します:iOSとmacOSではApple Vision、AndroidではGoogle ML Kit、WindowsではZXingCpp。 3つのエンジン間でシンボロジーカバレッジとデコードの動作が異なるため、あるプラットフォームで信頼性高くデコードされるバーコードが他のプラットフォームで異なる動作をすることがあります。 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")
IronBarcodeのMAUI統合ガイドには、すべてのMAUIターゲットに対する完全なセットアップ手順が記載されています。 IronBarcodeは、BarcodeScanning.Native.MauiにパスがまったくないASP.NET、Docker、Azure Functions、およびAWS Lambda環境でのサーバーサイドデプロイメントもサポートしています。
バーコード読み取り精度:UPC-AおよびPDF417
BarcodeScanning.Native.Mauiでの2つの形式固有の動作は、製品アプリケーションにおいて注意する価値があります。
バーコードスキャン。MAUIアプローチ
iOSでは、BarcodeScanning.Native.Mauiの基盤検出(Apple Vision)はUPC-Aバーコードの13桁を返すことがあります。 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
形式チェックが必要ですので、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")
バーコードデータの正確性が在庫照会、POS取引またはサプライチェーンの統合に直接影響するアプリケーションでは、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、デスクトップ、サーバー |
| カメラフレームのみ | ファイル、バイト配列、ストリーム、PDF |
| ファイル/PDF APIなし | BarcodeReader.Read(path) — 画像ファイルとPDFを受け入れます |
| MAUIターゲット全体での3つのエンジン | すべてのターゲットで1つの管理エンジン |
| 生成APIなし | BarcodeWriter.CreateBarcode() + QRCodeWriter.CreateQrCode() |
チームがBarcodeScanning.MAUIからIronBarcodeへの移行を検討する場合
クロスプラットフォームエンジンの一貫性が要件となる
iOS、Android、Windows、macOSをターゲットとするMAUIアプリケーションがBarcodeScanning.Native.Mauiを使用する場合、3つの異なる認識エンジンをピックアップします:Apple Vision (iOS/macOS), Google ML Kit (Android), ZXingCpp (Windows)。 各エンジンは独自のシンボロジーカバレッジとデコード動作を持っているので、同じバーコードがプラットフォーム間で異なるデコードを行う可能性があります。そして、アプリケーションはしばしば違いを覆い隠そうと、標準化レイヤーを追加します。 メンテナンスのオーバーヘッドが増えたり、QAがエンジンの違いに結びつけられたクロスプラットフォームの退行を報告したりする場合、チームはバーコードレイヤーを単一の管理されたエンジンに移行して、すべてのターゲットで同じように動作させることがあります。
ファイルアップロードまたはPDF処理の要件が追加されました
モバイルアプリケーションは、多くの場合、入力方法としてライブカメラによるスキャンのみから始まり、後にアップロードされた画像やドキュメントを受け入れるように拡張される。 ギャラリーにある写真から、メールで受け取った画像から、または出荷マニフェストや搭乗券を含むPDFからバーコードをスキャンする必要があるユーザーの場合、BarcodeScanning.Native.Mauiにはこれらの入力のコードパスがありません。 この要件の境界に達したチームは選択を迫られます: ファイルとPDF入力用にBarcodeScanning.Native.Mauiと共に別のバーコードライブラリを追加するか、すべての入力タイプを処理する単一のライブラリに移行するかです。異なるAPIと結果型を持つ2つのバーコードパッケージを管理することは、1つのパッケージソリューションを避ける長期的な複雑性を追加します。
サーバーサイドでのバーコード処理が導入されました
モバイル端末でバーコードをスキャンするアプリケーションは、多くの場合、サーバー側のコンポーネントを開発します。これは、バーコードを検証するASP.NET APIエンドポイント、PDFを処理するバックグラウンドジョブ、またはアップロードされたドキュメントから追跡番号を抽出するクラウド関数などです。 BarcodeScanning.Native.MauiはMAUI UIコントロールライブラリです; サーバーサイドの実装はありません。 モバイルとサーバーの両方で同じバーコード読み取りロジックが必要なチームは、サーバー側で別のライブラリを使用する必要があります。サーバー側の要件が発生すると、チームはモバイルとサーバーの両方をカバーする単一のライブラリに統合する方が、2つの別々の実装を維持するよりも望ましいかどうかを検討することがよくあります。
UPC-Aデータ標準化が関心の対象となる
iOSのUPC-A 13桁の動作は、開発段階で必ずしも検出されるとは限りません。 開発中にスキャンされたUPC-Aバーコードは正常に機能しているように見えるかもしれませんが、AppleのVisionフレームワークからの先頭のゼロが標準化がない場合、データベースに表示されることがあります。 13桁のUPC-A値を在庫記録、POSシステム、またはサプライチェーン統合で発見したチームは、コード修正とデータ修正ステップの両方が必要かもしれません。記録された標準化を追加すると新しいスキャンを処理します; 一貫したUPC-A出力を持つライブラリへの移行は時に長期解決策として好まれます。
PDF417文書のスキャンが必要です
PDF417は、北米において配送ラベル、運転免許証、搭乗券などに使用されているバーコード形式です。 これらは、物流、本人確認、旅行関連のアプリケーションでよくスキャンされる対象です。 BarcodeScanning.Native.MauiのGitHubの問題トラッカーには、PDF417がiOS/Androidエンジンで"非常に問題が多い-ほとんどのスキャンが発生しない"として記録されています。 PDF417の信頼性が機能要件であるアプリケーションの場合、チームはしばしば代替ライブラリを評価します。
一般的な移行の考慮事項
カメライベントをMediaPickerと静的読み取りに転送
移行のコアな構造変化は、連続したカメライベントパターンをBarcodeReader.Read()を行うことです。 CameraView XAMLコントロール、およびscanner: XMLネームスペース宣言はすべて削除されます。 それらの代わりに、ボタンがBarcodeReader.Read()に渡されます。 これにより、ユーザーエクスペリエンスはライブビューファインダーからシステムカメラの画面へと変化し、ほとんどのビジネスアプリケーションに適したものとなる。
スレッドマーシャリングの変更点
BarcodeScanning.Native.MauiはバックグラウンドスレッドでMainThread.BeginInvokeOnMainThread()で更新をラップします。 IronBarcodeが使用するMediaPicker + 非同期パターンでは、awaitの後の継続処理が呼び出しコンテキストに戻ります。通常、これはメインスレッドです。 ほとんどの場合、MainThread.BeginInvokeOnMainThread()ラッパーは削除でき、イベントハンドラーコードはシンプルになります。
UPC-A標準化の削除
BarcodeScanning.Native.MauiのiOS UPC-A 13桁の動作を処理したコードベースは、Substring(1)を呼び出して先頭のゼロを削除するコードを持っています。 このコードは移行後に削除する必要があります - IronBarcodeは標準の12桁の値を返し、標準化を保持すると、有効なUPC-A読みの最初の桁を誤って削除することになります。
マウイ島の許可
BarcodeScanning.Native.Mauiはパッケージ設定の一部としてAndroidおよびiOSのマニフェストにカメラの許可を自動的に追加します。IronBarcodeはMediaPicker.CapturePhotoAsync()のために任意のMAUIアプリが必要とするものです。 これらの権限は、カメラを何らかの目的で使用するMAUIプロジェクトには通常既に含まれています。
IronBarcodeの追加機能
この比較で取り上げた機能以外にも、 IronBarcodeはBarcodeScanning.Native.Mauiでは一切対応していない機能を提供しています。
-バーコード生成: Code128、QR、DataMatrix、PDF417などの形式をPNG、SVG、またはバイト配列として生成します。これらはMAUI UI、APIレスポンス、または印刷ラベルで使用できます。
- QRコード生成:ロゴの埋め込み、色のカスタマイズ、エラー訂正レベルの制御など、スタイリッシュなQRコードを作成できます。
- マルチバーコード読み取り:
ExpectMultipleBarcodesオプションは、単一の画像に存在するすべてのバーコードを一度に読み取ります。 - PDFバーコード抽出: PDF文書に埋め込まれたバーコードを直接読み取ります。中間的な画像変換は不要です。 -サーバーサイド展開:カメラに依存することなく、同じバーコード読み取りおよび生成ロジックをASP.NET、Azure Functions、Docker、およびAWS Lambdaに展開できます。
- 読み取り速度設定:
ExtremeDetail設定により、画像品質に応じてスループットと精度を調整できます。 - サーバーとデスクトップの再利用: 同じライブラリはASP.NET、コンソール、WPF、およびWinFormsプロジェクトで実行されるので、MAUIクライアントとバックエンドサービス間でバーコードロジックを共有することができます。
.NETの互換性と将来の準備
IronBarcodeは.NET 6、.NET 7、および.NET 8をサポートし、.NET Framework 4.6.2以降もサポートしています。 これにより、最新 for .NETターゲットや、移行していないレガシーサーバー環境で実行可能です。 BarcodeScanning.Native.MauiはMAUI専用のライブラリであり、.NET Frameworkのサポートもなく、サーバーサイドのデプロイメントパスもありません。 コードベースがMAUIと既存 for .NET Frameworkまたは.NET Coreサーバーアプリケーションの両方にまたがるチームにとって、 IronBarcodeは各ランタイムコンテキストごとに個別のバーコードパッケージを必要とせずに、すべての環境で一貫したAPIを提供します。
結論
BarcodeScanning.Native.MauiとIronBarcodeは、それぞれ異なる問題に対処します。 BarcodeScanning.Native.Mauiはカメラ制御ライブラリで、MAUIターゲット全体でリアルタイムビューファインダーを提供し、自動バーコード検出を行い、認識を3つの異なるプラットフォームエンジンに委任します。 IronBarcodeはバーコードの読み取りおよび生成ライブラリで、あらゆるソースからの静的画像データを.NETターゲット間で単一の管理エンジンを通じて処理します。 アーキテクチャ上の違い(連続的なカメラストリームか、離散的なデータ入力か)によって、特定の要件に対してどのライブラリが適切かが決まります。
BarcodeScanning.Native.Mauiは、ライブインアプリカメラプレビューと連続フレーム検出が必要なUXパターンであるMAUIアプリの場合に最適な選択です、そして要件がファイルアップロード、PDF処理、またはサーバーサイドのバーコード作業を含むように拡大しない場合に推奨されます。 その範囲内では無料で、最小限かつ機能的です。
IronBarcodeは、バーコード入力がファイル、PDF、またはバイト配列から得られる場合、またはライブカメラではなく、サーバーサイドのバーコード処理がアーキテクチャに含まれる場合、または読み取りとともにバーコードの生成が必要な場合には最適な選択です。 プラットフォーム間で一貫したデコード動作や、PDF417の信頼性が生産要件である場合にも適しています。 これらの機能を実現するには、商用ライセンス費用という代償を支払う必要がある。
BarcodeScanning.Native.Mauiの範囲に現在適合する要件を持つチームにとって、ライブラリは合理的かつコスト効果の高い選択です。要件が成長している、またはライブカメラスキャンを超えることを期待しているチームにとって、IronBarcodeの一貫したAPIは、入力タイプ、プラットフォーム、およびデプロイメントターゲット全体にわたって実用的な代替手段です。
よくある質問
BarcodeScanning.MAUIとは何ですか?
BarCodeScanning.MAUIは、C#アプリケーションでバーコードを生成して読み取るため for .NETバーコードライブラリです。これは、開発者が.NETプロジェクト用のバーコードソリューションを選択する際に評価するいくつかの選択肢の1つです。
BarcodeScanning.MAUIとIronBarcodeの主な違いは何ですか?
IronBarcodeはインスタンス管理を必要としない静的なステートレスAPIを使用します。一方、BarcodeScanning.MAUIは通常、使用前にインスタンスの作成と設定が必要です。IronBarcodeはまた、ネイティブPDFサポート、自動フォーマット検出、すべての環境でのシングルキーライセンスを提供します。
IronBarcodeはBarcodeScanning.MAUIよりライセンスが簡単ですか?
IronBarcodeは単一のライセンスキーで開発環境と本番環境の両方をカバーします。これは、SDKキーとランタイムキーを分離するライセンスシステムと比較して、CI/CDパイプラインとDocker構成を簡素化します。
IronBarcodeはBarcodeScanning.MAUIがサポートしているすべてのバーコードフォーマットをサポートしていますか?
IronBarcodeはQRコード、Code 128、Code 39、DataMatrix、PDF417、Aztec、EAN-13、UPC-A、GS1など30以上のバーコードシンボロジーをサポートしています。フォーマットの自動検出は、明示的なフォーマットの列挙が不要であることを意味します。
IronBarcodeはネイティブPDFバーコード読み取りをサポートしていますか?
IronBarcodeは、別のPDFレンダリングライブラリを必要とせず、BarCodeReader.Read("document.pdf")を使用してPDFファイルから直接バーコードを読み取ります。ページごとの結果には、ページ番号、バーコードフォーマット、値、信頼度スコアが含まれます。
IronBarcodeはBarcodeScanning.MAUIと比べてどのようにバッチ処理を行いますか?
IronBarcodeの静的メソッドはステートレスで当然スレッドセーフであり、スレッドごとのインスタンス管理なしにParallel.ForEachを直接使用できます。どの価格帯でもスループットの上限はありません。
IronBarcode はど for .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をインストールする:パッケージマネージャーコンソールで'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への移行は、主にインスタンスベースのAPIコールをIronBarcodeのスタティックメソッドに置き換え、ライセンスの定型文を削除し、結果のプロパティ名を更新します。ほとんどの移行はコードを追加するのではなく、コードを削減します。
IronBarcodeはロゴ入りQRコードを生成できますか?
はい。QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png")は、設定可能なエラー修正機能付きで、ブランド画像をネイティブにQRコードに埋め込みます。カラーQRコードもChangeBarCodeColor()でサポートされています。

