フッターコンテンツにスキップ
ビデオ

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"
$vbLabelText   $csharpLabel

ライセンスは最初の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
$vbLabelText   $csharpLabel

結果は戻り値として即座に取得できます。 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
$vbLabelText   $csharpLabel

フォーマット指定: 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)
$vbLabelText   $csharpLabel

ビットごとの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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

コンテキストパラメータなし。 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
$vbLabelText   $csharpLabel

画像抽出ステップなし、サードパーティ製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")
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

ロゴとカラー入りの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")
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

これらのパターンには、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
$vbLabelText   $csharpLabel

画像フォルダを読み込み、バーコードを抽出し、結果を集計するという一連の処理は、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 →削除、BarCode NuGet追加
  • 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/catch
  • barcode.rawValuebarcode.Value
  • barcode.formatbarcode.Format
  • Barcode.FORMAT_QR_CODEBarcodeEncoding.QRCode
  • Barcode.FORMAT_CODE_128BarcodeEncoding.Code128
  • Barcode.FORMAT_ALL_FORMATSExpectBarcodeTypes 省略
  • 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、ストリームなどの複数の出力形式をサポートしています。

Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。

アイアンサポートチーム

私たちは週5日、24時間オンラインで対応しています。
チャット
メール
電話してね