
barKoder SDKからIronBarcodeへの移行
Barkoder は公式の .NET パッケージ - Plugin.Maui.Barkoder と Barkoder.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}");
}
}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 ClassImports 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 ClassIronBarcodeは同じデータに対するファイル/ストリーム/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}")
NextImports 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}")
NextIronBarcode 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をインストールしてください:
プロジェクトが Plugin.Maui.Barkoder または Barkoder.Xamarin を非カメラワークフローのためだけに使用している場合(または完全にファイル / PDF 処理に移行している場合)、削除してください。
dotnet remove package Plugin.Maui.Barkoder
アプリがまだライブカメラ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 IronBarCodeImports IronBarCodeステップ 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"Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"コード移行の例
画像からバーコードを読み取る
コア読み取りシナリオは、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 ClassImports 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 ClassIronBarcodeのアプローチ:
// 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}")
NextImports 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}")
NextIronBarcode の 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 SubImports 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 SubIronBarcodeのアプローチ:
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 IfImports 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 IfReadingSpeed.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 SubImports Barkoder.Maui
BarkoderView.StartScanning(Me)
Public Sub DidFinishScanning(result As BarcodeResult())
For Each r In result
Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}")
Next
End SubIronBarcodeのアプローチ:
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}")
NextImports 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これは単一のメソッド呼び出しです。 ページ抽出なし、複数リクエストなし、バーコードごとの処理オーバーヘッドなし。 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 SubImports 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 SubIronBarcodeのアプローチ:
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}")
NextImports 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サポートされているエンコード形式と生成オプションの完全なリストについては、 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")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")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)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)##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.Barkoder と Barkoder.Xamarin です。 どちらも非モバイルシナリオをカバーしていません。
解決策: IronBarcodeをインストールしてください:
Plugin.Maui.Barkoder が不要になった場合(完全にファイル / PDF / サーバー処理に移行している場合)、削除してください。
dotnet remove package Plugin.Maui.Barkoder
dotnet add package BarCode
課題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 UsingImports 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問題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))Dim results = Await Task.Run(Function() BarcodeReader.Read(imageBytes, options))問題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)Imports System
Dim deepOptions As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.ExtremeDetail,
.ExpectMultipleBarcodes = False
}
' Reuse across multiple reads
Dim results = BarcodeReader.Read("image.png", deepOptions)課題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()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()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" .
現在実施中または計画中のバーコードシナリオを文書化する。
- 読み取る必要があるバーコード形式はどれですか(Code128、DataMatrix、QR、PDF417など)
- ダメージを受けたバーコードの回復が必要かどうか (
ReadingSpeed.ExtremeDetail) - マルチバーコード検出が必要かどうか (
ExpectMultipleBarcodes = true) - バーコード生成が必要かどうか (
BarcodeWriter,QRCodeWriter) - PDF 処理が必要かどうか (
BarcodeReader.Read("doc.pdf")) - デプロイ対象 (ASP.NET Core、Azure Functions、Docker、Lambda、デスクトップ、MAUI)
コード更新タスク
Plugin.Maui.BarkoderまたはBarkoder.Xamarinを.csprojから不要な場所で削除するBarCodeNuGet パッケージをインストールする- 不要になった場所で
using Barkoder.Maui;(または Xamarin 相当品)を削除する - すべてのバーコード処理ファイルに
using IronBarCode;を追加する - アプリケーションの起動時に
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";を追加する BarkoderView.StartScanning/DidFinishScanningコールバックをBarcodeReader.Read(filePath, options)に置き換えるBarcodeResult.TextualDataをresult.ValueにマッピングするBarcodeResult.BarcodeTypeNameをresult.Formatにマッピングする- DeBlur 設定を
Speed = ReadingSpeed.ExtremeDetailにBarcodeReaderOptionsにマッピングする - マルチスキャン設定を
ExpectMultipleBarcodes = trueにBarcodeReaderOptionsにマッピングする - 生成要件の
BarcodeWriter.CreateBarcode()呼び出しを追加する - QRコード生成要件の
QRCodeWriter.CreateQrCode()呼び出しを追加する - すべての PDF 前処理コードを
BarcodeReader.Read("document.pdf")に置き換える - 同期の
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回限りの永久ライセンスでご利用いただけます。リクエストごとの料金、ボリューム制限、サブスクリプションの更新は一切ありません。 大規模にバーコードを処理する本番環境向けアプリケーションを構築するチームにとって、コストモデルはシンプルで予測可能です。
Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。
関連する記事


