IronBarcode を使用して .NET 5 の C# でバーコードを読み取る方法
Google ML KitバーコードスキャニングからIronBarcodeへの移行
このガイドは、次の2つの状況のいずれかに該当するチームを対象としています。1つ目は、Androidアプリケーションを.NET MAUIまたは.NET 9に移植していて、ML Kitのバーコードスキャナーを管理された代替手段に置き換える必要がある場合、2つ目は、クロスプラットフォームのバーコードに関する議論でGoogle ML Kitが推奨されたものの、 NuGetパッケージを追加しようとしたときにそれが存在しないことに気づいた場合です。
Google ML Kit バーコードスキャンは、Android および iOS 用のネイティブライブラリです。 Maven依存関係として出荷します(com.google.mlkit:barcode-scanning:17.3.0 バンドルまたは com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1 非バンドル)Kotlin/Java用、CocoaPod (GoogleMLKit/BarcodeScanning)としてSwift用。 ML Kitは2020年6月からスタンドアロン製品であり、Firebaseを必要としなくなりましたが、公式 for .NET SDKはなく、dotnet add package google-mlkit-barcodeもなく、GoogleからのファーストパーティC# APIもありません。 コミュニティが保守するXamarin/MAUIバインディングは年々登場していますが、ML Kitがその基礎となるSDKをアップデートする際に壊れます。
IronBarcodeは、 NuGetからインストールでき、標準的な.NETパターンと統合され、Windows、Linux、macOS、Docker、Azure、AWS上で動作するネイティブ.NETライブラリです。 このガイドでは、KotlinまたはJavaで記述したパターンを同等のC#コードに変換する方法を示します。
移植のコンテキスト
ML KitからIronBarcodeに移植する際には、構文だけでなく構造的にもいくつかの点が変わります。
コールバックが戻り値になります。 ML KitはAndroidのTask APIをaddOnFailureListenerと共に使用します。 IronBarcodeのBarcodeReader.Read()はコレクションを同期的に返します。 直接反復処理します。 コールバック登録なし、スレッド調整なし。
スキャナーオブジェクトなし。 ML Kitではscanner.process(inputImage)を呼び出す必要があります。 IronBarcodeは静的メソッドを使用します—BarcodeReader.Read()がエントリーポイントです。 管理または処分すべきインスタンスは存在しません。
InputImageの構築なし。 ML KitのInputImageはAndroid固有のソースから構築する必要があります: InputImage.fromFilePath(context, uri), InputImage.fromBitmap(bitmap, rotation), またはInputImage.fromMediaImage(image, rotation)。 IronBarcodeはファイルパス文字列、Stream, byte[], またはSystem.Drawing.Bitmapを受け入れます。 Androidコンテキストも、URIも、回転メタデータもありません。
Google Playサービスなし。 バンドルされていないML KitモデルはGoogle Playサービスを通じて実行されます。 バンドルされたバリアントは、モデルをAPK内に配信し(約2.4 MB追加)、Playサービスチェックを回避しますが、どちらのバリアントも.NETターゲットでは使用できません。 IronBarcodeにはそのような依存関係はなく、 .NETがサポートするあらゆるプラットフォームで同じように動作します。
.NETでのクイックセットアップ
プロジェクト内にXamarin/MAUI ML Kitのバインディングパッケージが存在する場合はすべて削除してから、 IronBarcodeをインストールしてください。
dotnet add package BarCode
アプリケーション起動時にライセンスキーを追加してください—Program.cs, MauiProgram.cs, またはStartup.csにおいて、アプリタイプに応じて。
// NuGet: dotnet add package BarCode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// NuGet: dotnet add package BarCode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
ライセンスは最初のBarcodeWriter.CreateBarcode()呼び出しの前のいつでも設定できます。 無料トライアルをご利用いただけます。 トライアルモードでは透かしによってバーコードが生成されますが、読み取りには影響しません。
バーコードの読み取り:KotlinからC#へ
基本的な単一バーコード読み取り
以下は、ファイルURIから単一のQRコードをスキャンする、Kotlinで記述された典型的なML Kitの読み込み例です。
// Android Kotlin — ML Kit
val options = BarcodeScannerOptions.Builder()
.setBarcodeFormats(Barcode.FORMAT_QR_CODE)
.build()
val scanner = BarcodeScanning.getClient(options)
val inputImage = InputImage.fromFilePath(context, imageUri)
scanner.process(inputImage)
.addOnSuccessListener { barcodes ->
val barcode = barcodes.firstOrNull()
if (barcode != null) {
Log.d("MLKit", "Value: ${barcode.rawValue}")
Log.d("MLKit", "Format: ${barcode.format}")
}
}
.addOnFailureListener { e ->
Log.e("MLKit", "Scan failed: ${e.message}")
}
IronBarcodeを使用したC#での同等のコード:
using IronBarCode;
try
{
var results = BarcodeReader.Read("captured-image.jpg");
var barcode = results.FirstOrDefault();
if (barcode != null)
{
Console.WriteLine($"Value: {barcode.Value}");
Console.WriteLine($"Format: {barcode.Format}");
}
}
catch (Exception ex)
{
Console.WriteLine($"Scan failed: {ex.Message}");
}
using IronBarCode;
try
{
var results = BarcodeReader.Read("captured-image.jpg");
var barcode = results.FirstOrDefault();
if (barcode != null)
{
Console.WriteLine($"Value: {barcode.Value}");
Console.WriteLine($"Format: {barcode.Format}");
}
}
catch (Exception ex)
{
Console.WriteLine($"Scan failed: {ex.Message}");
}
Imports IronBarCode
Try
Dim results = BarcodeReader.Read("captured-image.jpg")
Dim barcode = results.FirstOrDefault()
If barcode IsNot Nothing Then
Console.WriteLine($"Value: {barcode.Value}")
Console.WriteLine($"Format: {barcode.Format}")
End If
Catch ex As Exception
Console.WriteLine($"Scan failed: {ex.Message}")
End Try
結果は戻り値として即座に取得できます。 barcode.rawValueに対応しています。 barcode.formatに対応しています。 エラー処理では、別途エラーリスナーを用意するのではなく、標準的なtry/catchを使用します。
複数バーコード読み取り
ML Kitは1つのInputImageをスキャンし、リストを返します。1つの画像に複数のバーコードがある場合は、サクセスリスナーのリストを反復処理します:
// Android Kotlin — ML Kit, multiple barcodes
val options = BarcodeScannerOptions.Builder()
.setBarcodeFormats(Barcode.FORMAT_ALL_FORMATS)
.build()
val scanner = BarcodeScanning.getClient(options)
val inputImage = InputImage.fromFilePath(context, imageUri)
scanner.process(inputImage)
.addOnSuccessListener { barcodes ->
for (barcode in barcodes) {
val rawValue = barcode.rawValue
val format = barcode.format
processBarcode(rawValue, format)
}
}
.addOnFailureListener { e -> Log.e("MLKit", e.message ?: "Unknown error") }
IronBarcodeでは、BarcodeReaderOptions内で設定し、結果コレクションを反復処理します:
using IronBarCode;
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true
};
var results = BarcodeReader.Read("warehouse-shelf.jpg", options);
foreach (var barcode in results)
{
Console.WriteLine($"Format: {barcode.Format}, Value: {barcode.Value}");
ProcessBarcode(barcode.Value, barcode.Format);
}
using IronBarCode;
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true
};
var results = BarcodeReader.Read("warehouse-shelf.jpg", options);
foreach (var barcode in results)
{
Console.WriteLine($"Format: {barcode.Format}, Value: {barcode.Value}");
ProcessBarcode(barcode.Value, barcode.Format);
}
Imports IronBarCode
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True
}
Dim results = BarcodeReader.Read("warehouse-shelf.jpg", options)
For Each barcode In results
Console.WriteLine($"Format: {barcode.Format}, Value: {barcode.Value}")
ProcessBarcode(barcode.Value, barcode.Format)
Next
フォーマット指定: setBarcodeFormats を BarcodeReaderOptions に設定
ML Kitでは、setBarcodeFormats()を介してどのフォーマットを探すか指定する必要があります。 省略した場合、ML Kitはすべてのフォーマットを検索します。 IronBarcode同様の仕組みで動作します。フォーマット制約を省略するとすべてが検索されますが、想定される型を指定するとパフォーマンスが向上します。
| MLキット Kotlin | IronBarcode C# (IronBarcodeC#) |
|---|---|
Barcode.FORMAT_QR_CODE |
BarcodeEncoding.QRCode |
Barcode.FORMAT_CODE_128 |
BarcodeEncoding.Code128 |
Barcode.FORMAT_CODE_39 |
BarcodeEncoding.Code39 |
Barcode.FORMAT_CODE_93 |
BarcodeEncoding.Code93 |
Barcode.FORMAT_EAN_13 |
BarcodeEncoding.EAN13 |
Barcode.FORMAT_EAN_8 |
BarcodeEncoding.EAN8 |
Barcode.FORMAT_UPC_A |
BarcodeEncoding.UPCA |
Barcode.FORMAT_UPC_E |
BarcodeEncoding.UPCE |
Barcode.FORMAT_PDF417 |
BarcodeEncoding.PDF417 |
Barcode.FORMAT_DATA_MATRIX |
BarcodeEncoding.DataMatrix |
Barcode.FORMAT_AZTEC |
BarcodeEncoding.Aztec |
Barcode.FORMAT_ITF |
BarcodeEncoding.ITF |
Barcode.FORMAT_CODABAR |
BarcodeEncoding.Codabar |
Barcode.FORMAT_ALL_FORMATS |
ExpectBarcodeTypes 省略 |
IronBarcodeでフォーマットフラグを使用する方法:
using IronBarCode;
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128 | BarcodeEncoding.EAN13
};
var results = BarcodeReader.Read("product-image.jpg", options);
using IronBarCode;
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128 | BarcodeEncoding.EAN13
};
var results = BarcodeReader.Read("product-image.jpg", options);
Imports IronBarCode
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True,
.ExpectBarcodeTypes = BarcodeEncoding.QRCode Or BarcodeEncoding.Code128 Or BarcodeEncoding.EAN13
}
Dim results = BarcodeReader.Read("product-image.jpg", options)
ビットごとのOR演算は、ML Kitの可変長引数フォーマットリストと同じように機能します。
結果へのアクセス: rawValue とフォーマット
ML Kitの結果オブジェクトは、Int定数)を公開します。 IronBarcodeの結果は、BarcodeEncoding列挙値)を公開します。
// MLキット Kotlin — result fields
val rawValue: String? = barcode.rawValue
val format: Int = barcode.format
val boundingBox: Rect? = barcode.boundingBox
val displayValue: String? = barcode.displayValue
//IronBarcode C# (IronBarcodeC#)— result fields
string value = barcode.Value;
BarcodeEncoding format = barcode.Format;
int page = barcode.PageNumber; // populated for PDF / multi-page input
//IronBarcode C# (IronBarcodeC#)— result fields
string value = barcode.Value;
BarcodeEncoding format = barcode.Format;
int page = barcode.PageNumber; // populated for PDF / multi-page input
'IronBarcode VB.NET (IronBarcodeVB.NET)— result fields
Dim value As String = barcode.Value
Dim format As BarcodeEncoding = barcode.Format
Dim page As Integer = barcode.PageNumber ' populated for PDF / multi-page input
IronBarcodeではbarcode.Valueは常にnullでない文字列です—読み取りが成功した場合、値が存在します。 BarcodeEncoding列挙メンバであり、直接比較できます: if (barcode.Format == BarcodeEncoding.QRCode)。
.NETで何が変わったのか
コールバックではなく同期APIを採用。これが最も重要な構造変更点です。 ML KitのTask<List<Barcode>>を返します—リスナーをチェーンします。 IronBarcodeのTask.Run()でラップしてください:
using IronBarCode;
// In a MAUI ViewModel or page code-behind
var results = await Task.Run(() => BarcodeReader.Read(imagePath));
foreach (var barcode in results)
{
// update UI on main thread
MainThread.BeginInvokeOnMainThread(() =>
{
ResultLabel.Text = barcode.Value;
});
}
using IronBarCode;
// In a MAUI ViewModel or page code-behind
var results = await Task.Run(() => BarcodeReader.Read(imagePath));
foreach (var barcode in results)
{
// update UI on main thread
MainThread.BeginInvokeOnMainThread(() =>
{
ResultLabel.Text = barcode.Value;
});
}
Imports IronBarCode
Imports System.Threading.Tasks
Imports Microsoft.Maui.Dispatching
' In a MAUI ViewModel or page code-behind
Dim results = Await Task.Run(Function() BarcodeReader.Read(imagePath))
For Each barcode In results
' update UI on main thread
MainThread.BeginInvokeOnMainThread(Sub()
ResultLabel.Text = barcode.Value
End Sub)
Next
コンテキストパラメータなし。 ML Kitのすべての呼び出しでInputImageを構築するにはAndroid Contextが必要です。 IronBarcodeに必要なのは、ファイルパスまたはストリームのみです。 バーコードロジックからコンテキストスレッド処理を排除することで、コードが大幅に簡素化されます。
Google Play Servicesなし。 標準のML Kitモデルは、Play Servicesを介して実行されます—BarcodeScanning.getClient()は実行時にPlay Servicesの可用性を確認し、利用できない場合はスローします。 IronBarcodeには実行時サービスチェック機能はありません。 画像を読み込むか、標準例外をスローするかのどちらかです。
標準例外処理。 ML KitのExceptionサブクラスを受け取ります。 .NETでは、失敗は標準のSystem.Exceptionスローとして表面化し、通常の方法でtry/catchでキャッチできます。
PDF文書の読み込み
ML KitはPDFをサポートしていません。 URI InputImage.fromFilePath() の場合、Androidのバージョンによっては失敗するか、ラスター画像として最初のページのみを読むかのいずれかです。 文書(請求書処理、物流マニフェスト、フォームスキャンなど)を扱う場合、 IronBarcodeはPDFをネイティブに処理できます。
using IronBarCode;
// Read all barcodes from all pages of a PDF
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true
};
var results = BarcodeReader.Read("invoice-batch.pdf", options);
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} — {barcode.Value}");
}
using IronBarCode;
// Read all barcodes from all pages of a PDF
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true
};
var results = BarcodeReader.Read("invoice-batch.pdf", options);
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} — {barcode.Value}");
}
Imports IronBarCode
' Read all barcodes from all pages of a PDF
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True
}
Dim results = BarcodeReader.Read("invoice-batch.pdf", options)
For Each barcode In results
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} — {barcode.Value}")
Next
画像抽出ステップなし、サードパーティ製PDFライブラリなし、ページ反復ループと個別レンダリングなし。 PDFファイルのパスを渡すと、すべてのバーコード値とそのページ番号が返されます。
新しい機能:生成
ML Kitはバーコードを生成するのではなく、読み取るだけです。 移植後のアプリケーションでラベル、チケット、またはQRコードを作成する必要がある場合、 IronBarcodeは同じパッケージでそれらの機能も提供します。
配送ラベル用コード128:
using IronBarCode;
BarcodeWriter.CreateBarcode("SHIP-2024-98341", BarcodeEncoding.Code128)
.ResizeTo(400, 120)
.SaveAsPng("shipping-label.png");
using IronBarCode;
BarcodeWriter.CreateBarcode("SHIP-2024-98341", BarcodeEncoding.Code128)
.ResizeTo(400, 120)
.SaveAsPng("shipping-label.png");
Imports IronBarCode
BarcodeWriter.CreateBarcode("SHIP-2024-98341", BarcodeEncoding.Code128) _
.ResizeTo(400, 120) _
.SaveAsPng("shipping-label.png")
QRコード生成:
using IronBarCode;
QRCodeWriter.CreateQrCode("https://example.com/track/98341", 500)
.SaveAsPng("tracking-qr.png");
using IronBarCode;
QRCodeWriter.CreateQrCode("https://example.com/track/98341", 500)
.SaveAsPng("tracking-qr.png");
Imports IronBarCode
QRCodeWriter.CreateQrCode("https://example.com/track/98341", 500) _
.SaveAsPng("tracking-qr.png")
ロゴとカラー入りのQRコード:
using IronBarCode;
QRCodeWriter.CreateQrCode("https://example.com/product/4821", 500)
.AddBrandLogo("company-logo.png")
.ChangeBarCodeColor(System.Drawing.Color.DarkBlue)
.SaveAsPng("product-qr.png");
using IronBarCode;
QRCodeWriter.CreateQrCode("https://example.com/product/4821", 500)
.AddBrandLogo("company-logo.png")
.ChangeBarCodeColor(System.Drawing.Color.DarkBlue)
.SaveAsPng("product-qr.png");
Imports IronBarCode
QRCodeWriter.CreateQrCode("https://example.com/product/4821", 500) _
.AddBrandLogo("company-logo.png") _
.ChangeBarCodeColor(System.Drawing.Color.DarkBlue) _
.SaveAsPng("product-qr.png")
HTTPレスポンスのバーコードをバイト配列として返します。
using IronBarCode;
// In an.NET Corecontroller action
byte[] barcodeBytes = BarcodeWriter.CreateBarcode("ORDER-7734", BarcodeEncoding.QRCode)
.ToPngBinaryData();
return File(barcodeBytes, "image/png");
using IronBarCode;
// In an.NET Corecontroller action
byte[] barcodeBytes = BarcodeWriter.CreateBarcode("ORDER-7734", BarcodeEncoding.QRCode)
.ToPngBinaryData();
return File(barcodeBytes, "image/png");
Imports IronBarCode
' In a .NET Core controller action
Dim barcodeBytes As Byte() = BarcodeWriter.CreateBarcode("ORDER-7734", BarcodeEncoding.QRCode).ToPngBinaryData()
Return File(barcodeBytes, "image/png")
これらのパターンには、ML Kitに相当するものはありません。 これらは、モバイル専用スキャナーではなく、完全な.NETバーコードライブラリを使用しているため利用できる新しい機能です。
サーバーサイドバッチ処理
ML Kitは呼び出しごとに1枚の画像を処理し、Android/iOSランタイムを必要とし、サーバーサイド実行の概念はありません。 IronBarcodeはファイルをループ処理し、 ASP.NET Core上で動作し、通常通りスケーリングします。
using IronBarCode;
// Process a folder of scanned document images
var imageFiles = Directory.GetFiles("/data/scans", "*.jpg");
var allResults = new List<(string File, string Value, BarcodeEncoding Format)>();
foreach (var file in imageFiles)
{
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Faster,
ExpectMultipleBarcodes = false
};
var results = BarcodeReader.Read(file, options);
foreach (var barcode in results)
{
allResults.Add((file, barcode.Value, barcode.Format));
}
}
// Write results to CSV, database, etc.
foreach (var (file, value, format) in allResults)
{
Console.WriteLine($"{file}: [{format}] {value}");
}
using IronBarCode;
// Process a folder of scanned document images
var imageFiles = Directory.GetFiles("/data/scans", "*.jpg");
var allResults = new List<(string File, string Value, BarcodeEncoding Format)>();
foreach (var file in imageFiles)
{
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Faster,
ExpectMultipleBarcodes = false
};
var results = BarcodeReader.Read(file, options);
foreach (var barcode in results)
{
allResults.Add((file, barcode.Value, barcode.Format));
}
}
// Write results to CSV, database, etc.
foreach (var (file, value, format) in allResults)
{
Console.WriteLine($"{file}: [{format}] {value}");
}
Imports IronBarCode
Imports System.IO
' Process a folder of scanned document images
Dim imageFiles = Directory.GetFiles("/data/scans", "*.jpg")
Dim allResults = New List(Of (File As String, Value As String, Format As BarcodeEncoding))()
For Each file In imageFiles
Dim options = New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Faster,
.ExpectMultipleBarcodes = False
}
Dim results = BarcodeReader.Read(file, options)
For Each barcode In results
allResults.Add((file, barcode.Value, barcode.Format))
Next
Next
' Write results to CSV, database, etc.
For Each result In allResults
Console.WriteLine($"{result.File}: [{result.Format}] {result.Value}")
Next
画像フォルダを読み込み、バーコードを抽出し、結果を集計するという一連の処理は、ML Kitでは実行できません。 これは標準的なIronBarcodeのワークフローです。
機能比較
| フィーチャー | Google MLキット | IronBarcode |
|---|---|---|
| .NET NuGetパッケージ | None | BarCode |
| C# / .NET API | None | はい |
| バーコード読み取り | はい(Android/iOS) | はい(全プラットフォーム対応) |
| バーコード生成 | なし | はい |
| QRコード生成 | なし | はい |
| QRロゴ埋め込み | なし | はい |
| PDF入力 | なし | はい |
| 複数ページ文書のサポート | なし | はい |
| カメラ/フレーム入力 | はい | 画像ファイル経由 |
| サーバーサイドへのデプロイ | なし | はい |
| .NET Core | なし | はい |
| Azure Functions | なし | はい |
| Docker / Linux | なし | はい |
| Google Play開発者サービスが必要です | アンバンドルバリアントのみ | なし |
| Firebase依存 | なし(2020年6月以降独立) | なし |
| 同期型.NET API | なし | はい |
| 依存性注入に対応 | なし | はい(静的API) |
ExpectMultipleBarcodes オプション |
結果リスト経由 | BarcodeReaderOptions |
| フォーマット仕様 | setBarcodeFormats() |
ExpectBarcodeTypes |
| 速度と精度のトレードオフ | 固定(モデルベース) | ReadingSpeed 列挙 |
| 価格 | 無料(オンデバイス、モバイルのみ) | $749(Lite)から(永続) |
| プラットフォーム | Android、iOS | Windows、Linux、macOS、Docker、Azure、AWS |
移行チェックリスト
Androidのコードベースを移植する場合、または非公式のXamarin ML Kitバインディングを置き換える場合は、プロジェクト内でこれらのパターンを検索し、上記の翻訳を適用してください。
- Gradleファイルの
com.google.mlkit:barcode-scanning→削除、BarCodeNuGet追加 BarcodeScannerOptions.Builder()→new BarcodeReaderOptions { }BarcodeScanning.getClient(options)→削除(IronBarcodeにスキャナーインスタンスなし)InputImage.fromFilePath(context, uri)→ファイルパス文字列引数InputImage.fromBitmap(bitmap, rotation)→BarcodeReader.Read(stream)またはバイト配列オーバーロードscanner.process(inputImage)→BarcodeReader.Read(path, options).addOnSuccessListener { barcodes -> }→Read()の戻り値を反復.addOnFailureListener { e -> }→Read()周囲にtry/catchbarcode.rawValue→barcode.Valuebarcode.format→barcode.FormatBarcode.FORMAT_QR_CODE→BarcodeEncoding.QRCodeBarcode.FORMAT_CODE_128→BarcodeEncoding.Code128Barcode.FORMAT_ALL_FORMATS→ExpectBarcodeTypes省略using Google.MLKit.BarcodeScanning;(Xamarinバインディング) →using IronBarCode;MauiProgram.cs,Program.cs, またはStartup.csに設定する必要があります
コールバックベースのコードから同期コードへの構造的な変更が主な作業内容です。 書式定数と結果フィールド名は直接対応しています。 PDFおよび生成機能のサポートは完全に付加的な機能であり、移行作業は不要で、新しいコードを追加するだけで済みます。
よくある質問
なぜGoogle ML Kit BarCode ScanningからIronBarcodeに移行する必要があるのですか?
一般的な理由としては、ライセンスの簡素化(SDK + ランタイムキーの複雑さの排除)、スループット制限の排除、ネイティブPDFサポートの獲得、Docker/CI/CDデプロイの改善、プロダクションコード内のAPI定型文の削減などが挙げられます。
Google ML KitのAPIコールをIronBarcodeに置き換えるには?
インスタンスの作成とライセンスの定型文をIronBarCode.License.LicenseKey = "key "に置き換えてください。リーダー・コールをBarcodeReader.Read(path)に、ライター・コールをBarcodeWriter.CreateBarcode(data, encoding)に置き換えてください。静的メソッドはインスタンス管理を必要としません。
Google ML Kit BarCode ScanningからIronBarcodeに移行する場合、コードはどのくらい変更されますか?
ほとんどのマイグレーションでは、コード行数は少なくなります。ライセンスの定型文、インスタンス・コンストラクタ、明示的なフォーマット設定が削除されます。コアとなる読み取り/書き込み操作は、より短いIronBarcodeに対応し、よりきれいな結果オブジェクトが得られます。
移行時にGoogle ML Kit Barcode ScanningとIronBarcodeの両方をインストールしておく必要がありますか?
ほとんどのマイグレーションは、並列操作ではなく、直接置き換えです。一度に1つのサービスクラスを移行し、NuGet参照を置き換え、インスタンス化とAPI呼び出しパターンを更新してから次のクラスに移行します。
IronBarcodeのNuGetパッケージ名は何ですか?
パッケージは'IronBarcode'(大文字のBとC)です。Install-Package IronBarcode'または'dotnet add package IronBarcode'でインストールしてください。コード中のusingディレクティブは'using IronBarcode;'である。
IronBarcode はGoogle ML Kit Barcode Scanningと比較して、どのようにDockerデプロイを簡素化しますか?
IronBarcodeは外部SDKファイルやマウントされたライセンス設定のないNuGetパッケージです。Dockerでは、IRONBARCODE_LICENSE_KEY環境変数を設定すると、パッケージが起動時にライセンス検証を処理します。
IronBarcode はGoogle ML Kitから移行した後、すべてのバーコードフォーマットを自動的に検出しますか?
IronBarcodeは、サポートされているすべてのフォーマットのシンボルを自動検出します。明示的なBarcodeTypesの列挙は必要ありません。フォーマットが既に知られていて、パフォーマンスが重要な場合、BarcodeReaderOptionsは最適化として検索空間を制限することができます。
IronBarcodeは別のライブラリなしでPDFからバーコードを読み取ることができますか?
BarcodeReader.Read("document.pdf")は、PDFファイルをネイティブに処理します。結果には、見つかった各バーコードの PageNumber、Format、Value、および Confidence が含まれます。外部のPDFレンダリングステップは必要ありません。
IronBarcodeはどのようにパラレルバーコード処理を行うのですか?
IronBarcodeの静的メソッドはステートレスでスレッドセーフです。Parallel.ForEachをスレッドごとのインスタンス管理なしにファイルリスト上で直接使用します。BarcodeReaderOptions.MaxParallelThreadsは内部のスレッドバジェットを制御します。
Google ML Kit BarCode ScanningからIronBarcodeに移行すると、どのような結果プロパティが変更されますか?
一般的なリネーム:BarcodeValueはValueに、BarcodeTypeはFormatに。IronBarcodeの結果にはConfidenceとPageNumberも追加されます。ソリューション全体の検索と置換は、既存の結果処理コードで名前の変更を処理します。
CI/CDパイプラインでIronBarcodeのライセンスを設定するには?
IRONBARCODE_LICENSE_KEYをパイプラインシークレットとして保存し、アプリケーションの起動コードにIronBarCode.License.LicenseKeyを割り当てます。1つのシークレットで、開発環境、テスト環境、ステージング環境、本番環境を含むすべての環境をカバーできます。
IronBarcodeはカスタムスタイルのQRコード生成に対応していますか?
はい。QRCodeWriter.CreateQrCode()は、ChangeBarCodeColor()によるカスタムカラー、AddBrandLogo()によるロゴ埋め込み、設定可能なエラー訂正レベル、PNG、JPG、PDF、ストリームなどの複数の出力形式をサポートしています。

