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

Migrating from Barkoder SDK to IronBarcode

barKoder SDKからIronBarcodeへの移行

Barkoder は公式の .NET パッケージ — Plugin.Maui.BarkoderBarkoder.Xamarin — を提供していますが、どちらもモバイルカメラのスキャンコンポーネントに限定されています。 MatrixSightアルゴリズム、DeBlurモード、マルチバーコード検出、またはDPMサポートのためにbarKoderを評価し、その後ファイル入力、PDF処理、サーバーサイド展開、またはバーコード生成が必要であると発見した場合、.NET上でこれらの機能を提供するbarKoderはありません。 このガイドでは、IronBarcodeがこれらの要件をどのようにカバーしているか、各シナリオに対する動作コードを示します。

なぜbarKoder SDKから移行するのか

barKoderの評価からIronBarcodeへの移行を行うチームは一貫して同じトリガーを報告しています:

モバイルカメラ対応のみ: Barkoder の .NET フットプリントは Plugin.Maui.Barkoder (v1.6.8, 2026年3月) と Barkoder.Xamarin (v1.3.0) です。 どちらもネイティブの iOS / Android SDK をラップし、BarkoderView カメラコントロールを公開します。 汎用的な Barkoder.NET ライブラリはなく、ASP.NET Core ターゲット、コンソール / ワーカー / デスクトップターゲット、Linux サーバーターゲットもありません。

読み取り専用アーキテクチャ: Barkoderはスキャン専用のSDKです。 アプリケーションでバーコードを生成する必要がある場合(配送ラベルの印刷、パッケージ用のQRコードの作成、ドキュメントへのコードの埋め込みなど)、Barkoderは何も提供しません。 プロジェクト途中で生成要件が判明したチームは、ワークフローの両側面を網羅するライブラリを必要とする。

PDF処理なし: .NETEnterpriseアプリケーションでは、請求書、出荷明細書、医療記録、コンプライアンス文書など、PDF文書にバーコードが頻繁に表示されます。 Barkoderにはこのワークフローの概念がありません。 これはモバイルデバイス上のライブカメラ入力用に設計されており、PDFファイルを処理することはできません。

サーバー側での展開は不要です。Barkoderの処理モデルは、デバイス上でのモバイルスキャンです。 ASP.NET Core、Azure Functions、Dockerコンテナ、またはAWS Lambdaでは実行できません。 サーバーサイドのバーコードAPI、ドキュメント処理パイプライン、またはクラウド機能を構築するチームには、Barkoderを導入するための道筋がありません。

ファイル/ストリーム入力なし: MAUI アプリ内でも、BarkoderView はライブカメラフレームのみを消費します。 ファイルパス、バイト配列、または Stream オーバーロードは存在しないため、アップロードされた画像やギャラリーの写真を処理するには別のライブラリが必要です。

基本的な境界線

BarkoderのMAUIサーフィスはカメラに束縛されています。 .NET 開発者が Plugin.Maui.Barkoder を使用する場合、以下のようなコードを書きます。

// dotnet add package Plugin.Maui.Barkoder
using Barkoder.Maui;

public partial class ScanPage : ContentPage, IBarkoderDelegate
{
    public ScanPage()
    {
        InitializeComponent();
        BarkoderView.SetFlashEnabled(false);
        BarkoderView.StartScanning(this);
    }

    public void DidFinishScanning(BarcodeResult[] result)
    {
        foreach (var r in result)
            Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}");
    }
}
// dotnet add package Plugin.Maui.Barkoder
using Barkoder.Maui;

public partial class ScanPage : ContentPage, IBarkoderDelegate
{
    public ScanPage()
    {
        InitializeComponent();
        BarkoderView.SetFlashEnabled(false);
        BarkoderView.StartScanning(this);
    }

    public void DidFinishScanning(BarcodeResult[] result)
    {
        foreach (var r in result)
            Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}");
    }
}
Imports Barkoder.Maui

Public Partial Class ScanPage
    Inherits ContentPage
    Implements IBarkoderDelegate

    Public Sub New()
        InitializeComponent()
        BarkoderView.SetFlashEnabled(False)
        BarkoderView.StartScanning(Me)
    End Sub

    Public Sub DidFinishScanning(result As BarcodeResult()) Implements IBarkoderDelegate.DidFinishScanning
        For Each r In result
            Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}")
        Next
    End Sub
End Class
$vbLabelText   $csharpLabel

IronBarcodeは同じデータに対するファイル/ストリーム/PDF APIを提供します:

// dotnet add package BarCode
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.ExtremeDetail,
    ExpectMultipleBarcodes = false,
};

var results = BarcodeReader.Read("scanned-label.png", options);
foreach (var result in results)
{
    Console.WriteLine($"Format: {result.Format} | Value: {result.Value}");
}
// dotnet add package BarCode
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.ExtremeDetail,
    ExpectMultipleBarcodes = false,
};

var results = BarcodeReader.Read("scanned-label.png", options);
foreach (var result in results)
{
    Console.WriteLine($"Format: {result.Format} | Value: {result.Value}");
}
Imports IronBarCode

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"

Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.ExtremeDetail,
    .ExpectMultipleBarcodes = False
}

Dim results = BarcodeReader.Read("scanned-label.png", options)
For Each result In results
    Console.WriteLine($"Format: {result.Format} | Value: {result.Value}")
Next
$vbLabelText   $csharpLabel

IronBarcode vs barKoder SDK: 機能比較

フィーチャー barKoder SDK IronBarcode
.NET / C# API MAUI / XamarinカメラUIのみ フル.NETサーフィス
NuGetパッケージ Plugin.Maui.Barkoder, Barkoder.Xamarin BarCode
破損したバーコードの復旧 MatrixSight / DeBlur ReadingSpeed.ExtremeDetail + ML
複数バーコード検出 はい ExpectMultipleBarcodes = true
データマトリックス/DPM はい(読み取り専用) はい、読み込んで生成します
QRコード はい(読み取り専用) はい、読み込んで生成します
PDF417 はい はい
アステカ はい はい
Code128、Code39、EAN はい はい、50種類以上のフォーマットに対応しています。
バーコード生成 None フルバージョン - 全フォーマット
PDF処理 None ネイティブ
ファイル/ストリーム/バイト[]入力 なし — カメラフレームのみ はい
.NETコア None フル
Docker(Docker)/ Linux(リナックス) None フル
Azureファンクション None フル
AWSラムダ None フル
オフライン/エアギャップ デバイス上 完全地元産
非同期 / Await コールバックベース フル
依存性注入 None 完全な.NET DI
iOS(MAUI経由) Plugin.Maui.Barkoder (カメラUI) プログラム的(ファイル/ストリーム)
Android(MAUI経由) Plugin.Maui.Barkoder (カメラUI) プログラム的(ファイル/ストリーム)
価格について 年間サブスクリプション 749ドルから(永久)

クイックスタート: barKoder SDKからIronBarcodeへの移行

ステップ 1: NuGet パッケージを置き換える

IronBarcodeをインストールしてください:

dotnet add package BarCode

プロジェクトが Plugin.Maui.Barkoder または Barkoder.Xamarin を非カメラワークフローのためだけに使用している場合(または完全にファイル / PDF 処理に移行している場合)、削除してください。

dotnet remove package Plugin.Maui.Barkoder
dotnet remove package Plugin.Maui.Barkoder
SHELL

アプリがまだライブカメラUIを必要とする場合、Plugin.Maui.Barkoder を保持し、ファイル / PDF / 生成作業には IronBarcode を追加してください。

ステップ 2: 名前空間の更新

もはや必要でない場所でbarKoder名前空間を削除し、IronBarcode名前空間を追加します:

// Remove (if no longer needed)
// using Barkoder.Maui;

// Add
using IronBarCode;
// Remove (if no longer needed)
// using Barkoder.Maui;

// Add
using IronBarCode;
Imports IronBarCode
$vbLabelText   $csharpLabel

ステップ 3: ライセンスの初期化

アプリケーションの起動時にライセンス初期化を追加してください - ASP.NET Core では Program.cs 、コンソールやデスクトップアプリではバーコード操作の前に行います。

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

コード移行の例

画像からバーコードを読み取る

コア読み取りシナリオは、barKoderのライブカメラフレームからIronBarcodeのファイル/ストリーム/バイト[] APIにマッピングされます。

barKoder MAUIのアプローチ:

// dotnet add package Plugin.Maui.Barkoder
using Barkoder.Maui;

public partial class ScanPage : ContentPage, IBarkoderDelegate
{
    public ScanPage()
    {
        InitializeComponent();
        BarkoderView.StartScanning(this);
    }

    public void DidFinishScanning(BarcodeResult[] result)
    {
        foreach (var r in result)
        {
            Console.WriteLine($"Barcode: {r.TextualData}");
            Console.WriteLine($"Type: {r.BarcodeTypeName}");
        }
    }
}
// dotnet add package Plugin.Maui.Barkoder
using Barkoder.Maui;

public partial class ScanPage : ContentPage, IBarkoderDelegate
{
    public ScanPage()
    {
        InitializeComponent();
        BarkoderView.StartScanning(this);
    }

    public void DidFinishScanning(BarcodeResult[] result)
    {
        foreach (var r in result)
        {
            Console.WriteLine($"Barcode: {r.TextualData}");
            Console.WriteLine($"Type: {r.BarcodeTypeName}");
        }
    }
}
Imports Barkoder.Maui

Public Partial Class ScanPage
    Inherits ContentPage
    Implements IBarkoderDelegate

    Public Sub New()
        InitializeComponent()
        BarkoderView.StartScanning(Me)
    End Sub

    Public Sub DidFinishScanning(result As BarcodeResult()) Implements IBarkoderDelegate.DidFinishScanning
        For Each r In result
            Console.WriteLine($"Barcode: {r.TextualData}")
            Console.WriteLine($"Type: {r.BarcodeTypeName}")
        Next
    End Sub
End Class
$vbLabelText   $csharpLabel

IronBarcodeのアプローチ:

// dotnet add package BarCode
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

var results = BarcodeReader.Read("scan.png");
foreach (var result in results)
{
    Console.WriteLine($"Format: {result.Format}");
    Console.WriteLine($"Value: {result.Value}");
}
// dotnet add package BarCode
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

var results = BarcodeReader.Read("scan.png");
foreach (var result in results)
{
    Console.WriteLine($"Format: {result.Format}");
    Console.WriteLine($"Value: {result.Value}");
}
Imports IronBarCode

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"

Dim results = BarcodeReader.Read("scan.png")
For Each result In results
    Console.WriteLine($"Format: {result.Format}")
    Console.WriteLine($"Value: {result.Value}")
Next
$vbLabelText   $csharpLabel

IronBarcode の BarcodeReader.Read() は、事前にフォーマットを指定することなく、バーコードフォーマットを自動的に検出します。 同じ呼び出しは、モバイルデバイスで撮影されサーバーにアップロードされた画像、ファイルシステムから読み込まれた画像、またはストリームからバイト配列として受信した画像にも有効です。 詳しい読み方については、 IronBarcodeの読み方ガイドを参照してください。

破損したバーコードの復元(デブラーモード相当)

Barkoderのデブラーモードは、最もよく挙げられる機能の一つです。 IronBarcode は ReadingSpeed.ExtremeDetail を通じてファイル入力の同等機能を提供します。

barKoder MAUIのアプローチ:

// Live camera scanning with DeBlur enabled via configuration
using Barkoder.Maui;

BarkoderView.SetEnabledBarcodeTypes(/* configure formats */);
BarkoderView.StartScanning(this);

public void DidFinishScanning(BarcodeResult[] result)
{
    foreach (var r in result)
        Console.WriteLine($"Recovered: {r.TextualData}");
}
// Live camera scanning with DeBlur enabled via configuration
using Barkoder.Maui;

BarkoderView.SetEnabledBarcodeTypes(/* configure formats */);
BarkoderView.StartScanning(this);

public void DidFinishScanning(BarcodeResult[] result)
{
    foreach (var r in result)
        Console.WriteLine($"Recovered: {r.TextualData}");
}
Imports Barkoder.Maui

' Live camera scanning with DeBlur enabled via configuration
BarkoderView.SetEnabledBarcodeTypes() ' configure formats
BarkoderView.StartScanning(Me)

Public Sub DidFinishScanning(result As BarcodeResult())
    For Each r In result
        Console.WriteLine($"Recovered: {r.TextualData}")
    Next
End Sub
$vbLabelText   $csharpLabel

IronBarcodeのアプローチ:

using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.ExtremeDetail,
    ExpectMultipleBarcodes = false,
};

var results = BarcodeReader.Read("worn-shipping-label.png", options);

if (results.Any())
{
    Console.WriteLine($"Recovered barcode: {results.First().Value}");
}
else
{
    Console.WriteLine("Could not decode — image quality too low");
}
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.ExtremeDetail,
    ExpectMultipleBarcodes = false,
};

var results = BarcodeReader.Read("worn-shipping-label.png", options);

if (results.Any())
{
    Console.WriteLine($"Recovered barcode: {results.First().Value}");
}
else
{
    Console.WriteLine("Could not decode — image quality too low");
}
Imports IronBarCode

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"

Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.ExtremeDetail,
    .ExpectMultipleBarcodes = False
}

Dim results = BarcodeReader.Read("worn-shipping-label.png", options)

If results.Any() Then
    Console.WriteLine($"Recovered barcode: {results.First().Value}")
Else
    Console.WriteLine("Could not decode — image quality too low")
End If
$vbLabelText   $csharpLabel

ReadingSpeed.ExtremeDetail は、コントラスト強調、シャープ化、回転補正、およびデコードの試行前にダメージ回復を適用する、マルチパスMLベースの画像解析パイプラインを実行します。 バッチワークフローでは、デフォルトで ReadingSpeed.Balanced を使用し、ExtremeDetail には Balanced がデコードに失敗した画像のみにフォールバックします。

複数バーコード検出

Barkoder のマルチバーコードフレームスキャンは、IronBarcode の ExpectMultipleBarcodes オプションにマッピングされ、画像とPDFの両方で動作します。

barKoder MAUIのアプローチ:

// Live camera frame returns BarcodeResult[]; multi-scan configured on the view
using Barkoder.Maui;

BarkoderView.StartScanning(this);

public void DidFinishScanning(BarcodeResult[] result)
{
    foreach (var r in result)
        Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}");
}
// Live camera frame returns BarcodeResult[]; multi-scan configured on the view
using Barkoder.Maui;

BarkoderView.StartScanning(this);

public void DidFinishScanning(BarcodeResult[] result)
{
    foreach (var r in result)
        Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}");
}
Imports Barkoder.Maui

BarkoderView.StartScanning(Me)

Public Sub DidFinishScanning(result As BarcodeResult())
    For Each r In result
        Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}")
    Next
End Sub
$vbLabelText   $csharpLabel

IronBarcodeのアプローチ:

using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
};

// Works identically on images and PDFs
var results = BarcodeReader.Read("shipping-manifest.pdf", options);

foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber} | {barcode.Format} | {barcode.Value}");
}
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
};

// Works identically on images and PDFs
var results = BarcodeReader.Read("shipping-manifest.pdf", options);

foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber} | {barcode.Format} | {barcode.Value}");
}
Imports IronBarCode

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"

Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True
}

' Works identically on images and PDFs
Dim results = BarcodeReader.Read("shipping-manifest.pdf", options)

For Each barcode In results
    Console.WriteLine($"Page {barcode.PageNumber} | {barcode.Format} | {barcode.Value}")
Next
$vbLabelText   $csharpLabel

これは単一のメソッド呼び出しです。 ページ抽出なし、複数リクエストなし、バーコードごとの処理オーバーヘッドなし。 PDFファイルはネイティブ形式で読み込まれます。

データマトリックスの生成と読み取り

BarkoderはDataMatrixを読み込むことはできますが、生成することはできません。 IronBarcodeはワークフローの両側面をカバーしており、これは産業用追跡システムにおける一般的な要件です。

barKoder MAUIのアプローチ:

// Camera-only DataMatrix scanning; no generation available
using Barkoder.Maui;

BarkoderView.StartScanning(this);

public void DidFinishScanning(BarcodeResult[] result)
{
    foreach (var r in result)
        Console.WriteLine($"Part ID: {r.TextualData}");
}
// Camera-only DataMatrix scanning; no generation available
using Barkoder.Maui;

BarkoderView.StartScanning(this);

public void DidFinishScanning(BarcodeResult[] result)
{
    foreach (var r in result)
        Console.WriteLine($"Part ID: {r.TextualData}");
}
Imports Barkoder.Maui

' Camera-only DataMatrix scanning; no generation available
BarkoderView.StartScanning(Me)

Public Sub DidFinishScanning(result As BarcodeResult())
    For Each r In result
        Console.WriteLine($"Part ID: {r.TextualData}")
    Next
End Sub
$vbLabelText   $csharpLabel

IronBarcodeのアプローチ:

using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

// Generate a DataMatrix barcode for a part label
BarcodeWriter.CreateBarcode("PART-SN-20240315-A42291", BarcodeEncoding.DataMatrix)
    .SaveAsPng("part-label.png");

// Read DataMatrix from a scanned industrial part image
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.ExtremeDetail,
    ExpectMultipleBarcodes = false,
};

var results = BarcodeReader.Read("etched-part-photo.png", options);
foreach (var result in results)
{
    Console.WriteLine($"Part Serial: {result.Value}");
    Console.WriteLine($"Barcode Type: {result.Format}");
}
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

// Generate a DataMatrix barcode for a part label
BarcodeWriter.CreateBarcode("PART-SN-20240315-A42291", BarcodeEncoding.DataMatrix)
    .SaveAsPng("part-label.png");

// Read DataMatrix from a scanned industrial part image
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.ExtremeDetail,
    ExpectMultipleBarcodes = false,
};

var results = BarcodeReader.Read("etched-part-photo.png", options);
foreach (var result in results)
{
    Console.WriteLine($"Part Serial: {result.Value}");
    Console.WriteLine($"Barcode Type: {result.Format}");
}
Imports IronBarCode

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"

' Generate a DataMatrix barcode for a part label
BarcodeWriter.CreateBarcode("PART-SN-20240315-A42291", BarcodeEncoding.DataMatrix) _
    .SaveAsPng("part-label.png")

' Read DataMatrix from a scanned industrial part image
Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.ExtremeDetail,
    .ExpectMultipleBarcodes = False
}

Dim results = BarcodeReader.Read("etched-part-photo.png", options)
For Each result In results
    Console.WriteLine($"Part Serial: {result.Value}")
    Console.WriteLine($"Barcode Type: {result.Format}")
Next
$vbLabelText   $csharpLabel

サポートされているエンコード形式と生成オプションの完全なリストについては、 IronBarcodeのバーコード生成に関するドキュメントを参照してください。

ブランディングを施したQRコード生成

Barkoderはバーコードを生成しません。 IronBarcodeは、ロゴが埋め込まれたQRコードを生成します。これは、マーケティング、パッケージング、製品識別などのワークフローにおいて一般的に求められる機能です。

barKoder MAUIのアプローチ:

Not available — Plugin.Maui.Barkoder is a reader-only SDK with no
generation API on any platform.

IronBarcodeのアプローチ:

using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

// QR code with brand logo embedded at centre
QRCodeWriter.CreateQrCode("https://parts.example.com/product/A42", 500)
    .AddBrandLogo("company-logo.png")
    .SaveAsPng("branded-qr.png");
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

// QR code with brand logo embedded at centre
QRCodeWriter.CreateQrCode("https://parts.example.com/product/A42", 500)
    .AddBrandLogo("company-logo.png")
    .SaveAsPng("branded-qr.png");
Imports IronBarCode

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"

' QR code with brand logo embedded at centre
QRCodeWriter.CreateQrCode("https://parts.example.com/product/A42", 500) _
    .AddBrandLogo("company-logo.png") _
    .SaveAsPng("branded-qr.png")
$vbLabelText   $csharpLabel

ASP.NET Coreバーコード API エンドポイント

Barkoderにはサーバーサイドのデプロイメントモデルはありません。 モバイルスキャンアップロードエンドポイントに相当する機能(任意のクライアントから画像を受信し、バーコードデータを返す機能)を実現するには、 .NETライブラリが必要です。

barKoderのアプローチ:

Not available — Plugin.Maui.Barkoder runs only inside a MAUI app head
against a live camera. There is no ASP.NET Core integration and no
server-side execution model.

IronBarcodeのアプローチ:

// In Program.cs
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

app.MapPost("/api/scan", async (IFormFile file) =>
{
    using var stream = file.OpenReadStream();
    var imageBytes = new byte[stream.Length];
    await stream.ReadAsync(imageBytes);

    var options = new BarcodeReaderOptions
    {
        Speed = ReadingSpeed.Balanced,
        ExpectMultipleBarcodes = true,
    };

    var results = BarcodeReader.Read(imageBytes, options);

    return Results.Ok(results.Select(r => new
    {
        Value = r.Value,
        Format = r.Format.ToString(),
    }));
});
// In Program.cs
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

app.MapPost("/api/scan", async (IFormFile file) =>
{
    using var stream = file.OpenReadStream();
    var imageBytes = new byte[stream.Length];
    await stream.ReadAsync(imageBytes);

    var options = new BarcodeReaderOptions
    {
        Speed = ReadingSpeed.Balanced,
        ExpectMultipleBarcodes = true,
    };

    var results = BarcodeReader.Read(imageBytes, options);

    return Results.Ok(results.Select(r => new
    {
        Value = r.Value,
        Format = r.Format.ToString(),
    }));
});
Imports IronBarCode

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"

app.MapPost("/api/scan", Async Function(file As IFormFile) As Task(Of IResult)
    Using stream = file.OpenReadStream()
        Dim imageBytes(CInt(stream.Length) - 1) As Byte
        Await stream.ReadAsync(imageBytes, 0, imageBytes.Length)

        Dim options As New BarcodeReaderOptions With {
            .Speed = ReadingSpeed.Balanced,
            .ExpectMultipleBarcodes = True
        }

        Dim results = BarcodeReader.Read(imageBytes, options)

        Return Results.Ok(results.Select(Function(r) New With {
            .Value = r.Value,
            .Format = r.Format.ToString()
        }))
    End Using
End Function)
$vbLabelText   $csharpLabel

barKoder SDKAPIからIronBarcodeへのマッピングリファレンス

このテーブルは、barKoderのMAUI/Xamarinサーフィスを同等のIronBarcode呼び出しにマッピングします:

barKoder API IronBarcode相当品
barKoderポータル/設定で設定されたライセンス IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
BarkoderView での DeBlur 設定 Speed = ReadingSpeed.ExtremeDetail
BarkoderView でのマルチスキャン設定 ExpectMultipleBarcodes = true
SetEnabledBarcodeTypes(...) BarcodeEncoding.<Format> (読み込み時に自動検出)
BarkoderView.StartScanning(IBarkoderDelegate) BarcodeReader.Read("image.png") — 同期型
BarcodeResult.TextualData result.Value
BarcodeResult.BarcodeTypeName result.Format
MatrixSightによる損傷回復 ReadingSpeed.ExtremeDetail ML 前処理付き
ライブカメラフレーム入力 ファイルパス / Stream / byte[] 入力
デバイス上での処理 完全ローカル接続 - ネットワーク通話なし
世代サポートなし BarcodeWriter.CreateBarcode() / QRCodeWriter.CreateQrCode()
PDFはサポートされていません BarcodeReader.Read("document.pdf") — ネイティブ
サーバー展開なし ASP.NET Core、Docker、Azure Functions、Lambdaで動作します。
ページインデックスなし(該当なし) result.PageNumber — PDF 読み取りで利用可能

一般的な移行の問題と解決策

課題1: NuGetパッケージ名

barKoder SDK: 公式の .NET パッケージは Plugin.Maui.BarkoderBarkoder.Xamarin です。 どちらも非モバイルシナリオをカバーしていません。

解決策: IronBarcodeをインストールしてください:

dotnet add package BarCode

Plugin.Maui.Barkoder が不要になった場合(完全にファイル / PDF / サーバー処理に移行している場合)、削除してください。

dotnet remove package Plugin.Maui.Barkoder
dotnet add package BarCode
dotnet remove package Plugin.Maui.Barkoder
dotnet add package BarCode
SHELL

課題2: カメラフレーム入力対ファイル入力

barKoder SDK: すべての入力はライブカメラフレームとして届き、デバイス上で処理される連続ビデオフィードです。ファイルパス入力モードはありません。

解決策: IronBarcodeは、ファイル、ストリーム、バイト配列、およびSystem.Drawing.Imageオブジェクトを受け入れます。 モバイルクライアントからアップロードされた画像については、リクエストストリームを直接読み取ります。

using var stream = file.OpenReadStream();
var imageBytes = new byte[stream.Length];
await stream.ReadAsync(imageBytes);
var results = BarcodeReader.Read(imageBytes, options);
using var stream = file.OpenReadStream();
var imageBytes = new byte[stream.Length];
await stream.ReadAsync(imageBytes);
var results = BarcodeReader.Read(imageBytes, options);
Imports System.IO

Using stream = file.OpenReadStream()
    Dim imageBytes = New Byte(stream.Length - 1) {}
    Await stream.ReadAsync(imageBytes, 0, imageBytes.Length)
    Dim results = BarcodeReader.Read(imageBytes, options)
End Using
$vbLabelText   $csharpLabel

問題3:コールバックベースのAPIと同期結果の比較

barKoder SDK: BarkoderView.StartScanning(IBarkoderDelegate) はデリゲート/コールバックパターンを使用しており、DidFinishScanning(BarcodeResult[]) はカメラフィードでバーコードが検出されると非同期に発火します。

ソリューション: IronBarcode の BarcodeReader.Read() は同期型で、IEnumerable<BarcodeResult> を直接返します。 非同期が必要な ASP.NET Core コンテキストでは、Task.Run() でラップしてください。

var results = await Task.Run(() => BarcodeReader.Read(imageBytes, options));
var results = await Task.Run(() => BarcodeReader.Read(imageBytes, options));
Dim results = Await Task.Run(Function() BarcodeReader.Read(imageBytes, options))
$vbLabelText   $csharpLabel

問題4:デブラーモードの設定

barKoder SDK: DeBlur は、スキャン開始前に BarkoderView 設定で有効にされ、それ以降のすべてのスキャンに適用されます。

ソリューション: IronBarcode では、その同等機能は ReadingSpeed.ExtremeDetail を読み取りごとに BarcodeReaderOptions で設定します。 オプションオブジェクトを一度作成して再利用する:

var deepOptions = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.ExtremeDetail,
    ExpectMultipleBarcodes = false,
};

// Reuse across multiple reads
var results = BarcodeReader.Read("image.png", deepOptions);
var deepOptions = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.ExtremeDetail,
    ExpectMultipleBarcodes = false,
};

// Reuse across multiple reads
var results = BarcodeReader.Read("image.png", deepOptions);
Imports System

Dim deepOptions As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.ExtremeDetail,
    .ExpectMultipleBarcodes = False
}

' Reuse across multiple reads
Dim results = BarcodeReader.Read("image.png", deepOptions)
$vbLabelText   $csharpLabel

課題5:世代能力の不足

barKoder SDK: Barkoderは読み取り専用です。 バーコードやQRコードを生成するためのAPIは存在しません。

解決策: IronBarcodeは読み取りと生成の両方に対応しています。 標準フォーマットには BarcodeWriter を使用し、QRコードには QRCodeWriter を使用してください。

// Standard barcode generation
BarcodeWriter.CreateBarcode("SHIP-20240315-00428", BarcodeEncoding.Code128)
    .SaveAsPng("shipping-label.png");

// QR code generation
QRCodeWriter.CreateQrCode("https://example.com/product/A42", 500)
    .SaveAsPng("product-qr.png");

// Get as bytes for embedding in API response or PDF
byte[] barcodeBytes = BarcodeWriter.CreateBarcode("INV-100291", BarcodeEncoding.Code128)
    .ToPngBinaryData();
// Standard barcode generation
BarcodeWriter.CreateBarcode("SHIP-20240315-00428", BarcodeEncoding.Code128)
    .SaveAsPng("shipping-label.png");

// QR code generation
QRCodeWriter.CreateQrCode("https://example.com/product/A42", 500)
    .SaveAsPng("product-qr.png");

// Get as bytes for embedding in API response or PDF
byte[] barcodeBytes = BarcodeWriter.CreateBarcode("INV-100291", BarcodeEncoding.Code128)
    .ToPngBinaryData();
Imports System

' Standard barcode generation
BarcodeWriter.CreateBarcode("SHIP-20240315-00428", BarcodeEncoding.Code128) _
    .SaveAsPng("shipping-label.png")

' QR code generation
QRCodeWriter.CreateQrCode("https://example.com/product/A42", 500) _
    .SaveAsPng("product-qr.png")

' Get as bytes for embedding in API response or PDF
Dim barcodeBytes As Byte() = BarcodeWriter.CreateBarcode("INV-100291", BarcodeEncoding.Code128) _
    .ToPngBinaryData()
$vbLabelText   $csharpLabel

barKoder SDK移行チェックリスト

マイグレーション前のタスク

barKoderの参照についてコードベースを監査してください:

grep -r "Barkoder\|BarkoderView\|IBarkoderDelegate\|BarcodeResult" --include="*.cs" .
grep -r "Plugin.Maui.Barkoder\|Barkoder.Xamarin" --include="*.csproj" .
grep -r "Barkoder" --include="*.xaml" .
grep -r "Barkoder\|BarkoderView\|IBarkoderDelegate\|BarcodeResult" --include="*.cs" .
grep -r "Plugin.Maui.Barkoder\|Barkoder.Xamarin" --include="*.csproj" .
grep -r "Barkoder" --include="*.xaml" .
SHELL

現在実施中または計画中のバーコードシナリオを文書化する。

  • 読み取る必要があるバーコード形式はどれですか(Code128、DataMatrix、QR、PDF417など)
  • ダメージを受けたバーコードの回復が必要かどうか (ReadingSpeed.ExtremeDetail)
  • マルチバーコード検出が必要かどうか (ExpectMultipleBarcodes = true)
  • バーコード生成が必要かどうか (BarcodeWriter, QRCodeWriter)
  • PDF 処理が必要かどうか (BarcodeReader.Read("doc.pdf"))
  • デプロイ対象 (ASP.NET Core、Azure Functions、Docker、Lambda、デスクトップ、MAUI)

コード更新タスク

  1. Plugin.Maui.Barkoder または Barkoder.Xamarin.csproj から不要な場所で削除する
  2. BarCode NuGet パッケージをインストールする
  3. 不要になった場所で using Barkoder.Maui; (または Xamarin 相当品)を削除する
  4. すべてのバーコード処理ファイルに using IronBarCode; を追加する
  5. アプリケーションの起動時に IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"; を追加する
  6. BarkoderView.StartScanning / DidFinishScanning コールバックを BarcodeReader.Read(filePath, options) に置き換える
  7. BarcodeResult.TextualDataresult.Value にマッピングする
  8. BarcodeResult.BarcodeTypeNameresult.Format にマッピングする
  9. DeBlur 設定を Speed = ReadingSpeed.ExtremeDetailBarcodeReaderOptions にマッピングする
  10. マルチスキャン設定を ExpectMultipleBarcodes = trueBarcodeReaderOptions にマッピングする
  11. 生成要件の BarcodeWriter.CreateBarcode() 呼び出しを追加する
  12. QRコード生成要件の QRCodeWriter.CreateQrCode() 呼び出しを追加する
  13. すべての PDF 前処理コードを BarcodeReader.Read("document.pdf") に置き換える
  14. 同期の BarcodeReader.Read() 呼び出しを非同期 ASP.NET Core エンドポイントに Task.Run() でラップする

移行後のテスト

コードの更新が完了したら、以下の点を確認してください。

  • すべての画像フォーマットに対して BarcodeReader.Read() が結果を返すことを確認する (PNG, JPEG, TIFF, BMP)
  • ReadingSpeed.ExtremeDetail がテストセット内の最低品質のサンプルからバーコードを回復することを確認する
  • ExpectMultipleBarcodes = true がマルチバーコード文書からの正しいバーコードの数を返すことを確認する
  • 生産ドキュメントワークフローで使用されるすべてのPDFバージョンに対してPDFの読み取りテストを実施
  • BarcodeWriter.CreateBarcode() の出力がターゲットスキャナーでスキャン可能であることを確認する
  • QRCodeWriter.CreateQrCode() の出力がモバイルQRリーダーでスキャン可能であることを確認する
  • モバイルクライアントからのファイルアップロードを使用して、 ASP.NET Coreエンドポイントをテストします(該当する場合)。
  • Docker、Azure、またはLambdaのデプロイ先で正しく動作することを確認します。 該当する場合は、読み取り・処理・生成の全サイクルを網羅するエンドツーエンドテストを実行する。

IronBarcodeへの移行の主なメリット

カメラを使用しない .NET 全般対応プラットフォーム: IronBarcode は NuGet からインストールされ、ASP.NET Core、Azure Functions、Lambda、Docker、コンソール、ワーカー、WPF、WinForms、Avalonia、Blazor、MAUI のいずれの .NET プロジェクトでも実行されます。Barkoder の Plugin.Maui.Barkoder は MAUI モバイルアプリヘッド内のカメラUIのみに対応しています。 IronBarcodeはそれ以外のすべてをカバーします。

カメラなしの損傷耐性読み取り: Barkoder を魅力的にした機能 — DeBlur、MatrixSight、損傷回復 — は、ReadingSpeed.ExtremeDetail と ML ベースの画像前処理を通じて IronBarcode に備わっています。 Barkoderがライブカメラ入力で実現するのと同様の精度向上を、 IronBarcodeはファイル、スキャン済み文書、アップロードされた画像でも実現します。

完全な読み取りおよび生成ワークフロー: Barkoderは読み取り専用です。 IronBarcodeは、50種類以上のフォーマットに対応したバーコードの読み取りと生成の両方を、単一のパッケージで提供します。 配送ラベルの作成、パッケージ用のQRコードの作成、または文書へのバーコードの埋め込みが必要なチームは、2つ目のライブラリを必要としません。

ネイティブPDFサポート:請求書、マニフェスト、医療記録、コンプライアンス文書などのPDF文書からバーコードを読み取ることは、 IronBarcodeの優れた機能です。 中間的な画像抽出も、ページごとのAPI呼び出しも、追加の依存関係もありません。 マルチページPDFは、単一の BarcodeReader.Read() 呼び出しで処理されます。

完全なサーバーサイド展開: IronBarcodeは、 ASP.NET Core、Azure Functions、AWS Lambda、Dockerコンテナ、およびその他のあらゆる.NETホスティング環境で動作します。 ネットワーク呼び出しやAPIキーの管理、リモートサービスによる遅延追加なしに、ローカルでバーコードを処理します。バーコード1個の処理でも100万個の処理でもコストは同じで、リクエストごとの料金は一切かかりません。

予測可能な永久ライセンス価格: IronBarcodeは、開発者1名につき749ドルからの1回限りの永久ライセンスでご利用いただけます。リクエストごとの料金、ボリューム制限、サブスクリプションの更新は一切ありません。 大規模にバーコードを処理する本番環境向けアプリケーションを構築するチームにとって、コストモデルはシンプルで予測可能です。

よくある質問

なぜBarkoder SDKからIronBarcodeに移行する必要があるのですか?

一般的な理由としては、ライセンスの簡素化(SDK + ランタイムキーの複雑さの排除)、スループット制限の排除、ネイティブPDFサポートの獲得、Docker/CI/CDデプロイの改善、プロダクションコード内のAPI定型文の削減などが挙げられます。

BarkoderのAPIコールをIronBarcodeに置き換えるには?

インスタンスの作成とライセンスの定型文をIronBarCode.License.LicenseKey = "key "に置き換えてください。リーダー・コールをBarcodeReader.Read(path)に、ライター・コールをBarcodeWriter.CreateBarcode(data, encoding)に置き換えてください。静的メソッドはインスタンス管理を必要としません。

Barkoder SDKからIronBarcodeに移行する場合、コードはどのくらい変更されますか?

ほとんどのマイグレーションでは、コード行数は少なくなります。ライセンスの定型文、インスタンス・コンストラクタ、明示的なフォーマット設定が削除されます。コアとなる読み取り/書き込み操作は、より短いIronBarcodeに対応し、よりきれいな結果オブジェクトが得られます。

移行時にBarkoder SDKとIronBarcodeの両方をインストールしておく必要がありますか?

ほとんどのマイグレーションは、並列操作ではなく、直接置き換えです。一度に1つのサービスクラスを移行し、NuGet参照を置き換え、インスタンス化とAPI呼び出しパターンを更新してから次のクラスに移行します。

IronBarcodeのNuGetパッケージ名は何ですか?

パッケージは'IronBarcode'(大文字のBとC)です。Install-Package IronBarcode'または'dotnet add package IronBarcode'でインストールしてください。コード中のusingディレクティブは'using IronBarcode;'である。

IronBarcode はBarkoder SDKと比較して、どのようにDockerデプロイを簡素化しますか?

IronBarcodeは外部SDKファイルやマウントされたライセンス設定のないNuGetパッケージです。Dockerでは、IRONBARCODE_LICENSE_KEY環境変数を設定すると、パッケージが起動時にライセンス検証を処理します。

IronBarcodeはBarkoderから移行した後、すべてのバーコードフォーマットを自動的に検出しますか?

IronBarcodeは、サポートされているすべてのフォーマットのシンボルを自動検出します。明示的なBarcodeTypesの列挙は必要ありません。フォーマットが既に知られていて、パフォーマンスが重要な場合、BarcodeReaderOptionsは最適化として検索空間を制限することができます。

IronBarcodeは別のライブラリなしでPDFからバーコードを読み取ることができますか?

BarcodeReader.Read("document.pdf")は、PDFファイルをネイティブに処理します。結果には、見つかった各バーコードの PageNumber、Format、Value、および Confidence が含まれます。外部のPDFレンダリングステップは必要ありません。

IronBarcodeはどのようにパラレルバーコード処理を行うのですか?

IronBarcodeの静的メソッドはステートレスでスレッドセーフです。Parallel.ForEachをスレッドごとのインスタンス管理なしにファイルリスト上で直接使用します。BarcodeReaderOptions.MaxParallelThreadsは内部のスレッドバジェットを制御します。

Barkoder SDKから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時間オンラインで対応しています。
チャット
メール
電話してね