IronBarcode を使用して C# でバーコードスキャナー API を構築する方法
これまで、C# スキャナー API を .NET で構築するには、複雑なスキャナー SDK の統合や限られたソフトウェア ライブラリが必要でした。 [13] IronBarcodeを使用すると、開発者は数分で強力な生産準備が整ったバーコードスキャナーAPIを作成できます。 [14] これにより、画像、PDF、さらには損傷したスキャン入力から簡単にバーコードデータを処理できます。
このチュートリアルでは、Windows 上で ASP.NET Core を使用して RESTful スキャナー API を構築する方法を示し、エンタープライズレベルの精度を維持しながら、ハードウェア スキャナー デバイスに代わるスケーラブルな代替手段を提供します。 API は、複数のスキャナー タイプを処理し、バイナリ データを処理し、サポートされている任意のマトリックスまたはテーブル形式からバーコード値を抽出することができます。
IronBarcode のインストールとセットアップ方法
IronBarcode の使用を開始するには、単一の NuGet パッケージをインストールするだけで簡単です。 ASP.NET Core プロジェクトを開き、パッケージ マネージャー コンソールで次のコマンドを実行してください:
Install-Package BarCode
インストール後、コントローラーに IronBarcode 名前空間を追加し、このワンラインの例を使用してライブラリをテストします:
using IronBarCode;
// Simple test to verify installation
var result = BarcodeReader.Read("test-barcode.png");
Console.WriteLine($"Scanned: {result.First().Value}");using IronBarCode;
// Simple test to verify installation
var result = BarcodeReader.Read("test-barcode.png");
Console.WriteLine($"Scanned: {result.First().Value}");IRON VB CONVERTER ERROR developers@ironsoftware.comこのコードはバーコード画像を読み取り、その値を出力します。 BarcodeReader.Read() メソッドはバーコード形式を自動的に検出し、結果のコレクションを返します。これにより、JPEG、BMP、PNG、TIFF などのサポートされている画像や、配列またはバイナリ データ形式からバーコード データを抽出することが非常に簡単になります。
[15] ## 完全なスキャナーAPIコントローラーをどのように構築できますか?
ASP.NET Core を使用してスキャナー API を作成するには、さまざまな入力ソースを受け入れるパラメータを持つコントローラーをセットアップする必要があります。 以下は完全な実装です:
using Microsoft.AspNetCore.Mvc;
using IronBarCode;
using System.Drawing;
namespace BarcodeScannerAPI.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class ScannerController : ControllerBase
{
// Model for API responses
public class ScanResult
{
public bool Success { get; set; }
public List<string> BarcodeValues { get; set; } = new List<string>();
public string BarcodeFormat { get; set; }
public string ErrorMessage { get; set; }
}
[HttpPost("scan-file")]
public async Task<ActionResult<ScanResult>> ScanFile(IFormFile file)
{
if (file == null || file.Length == 0)
return BadRequest(new ScanResult
{
Success = false,
ErrorMessage = "No file uploaded"
});
try
{
using var stream = new MemoryStream();
await file.CopyToAsync(stream);
// Configure scanner options for better accuracy
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
ExpectBarcodeTypes = BarcodeEncoding.All
};
// Read barcodes from the uploaded file
var results = BarcodeReader.Read(stream.ToArray(), options);
if (results.Any())
{
return Ok(new ScanResult
{
Success = true,
BarcodeValues = results.Select(r => r.Value).ToList(),
BarcodeFormat = results.First().BarcodeType.ToString()
});
}
return Ok(new ScanResult
{
Success = false,
ErrorMessage = "No barcodes found"
});
}
catch (Exception ex)
{
return StatusCode(500, new ScanResult
{
Success = false,
ErrorMessage = $"Processing error: {ex.Message}"
});
}
}
[HttpPost("scan-base64")]
public ActionResult<ScanResult> ScanBase64([FromBody] string base64Image)
{
try
{
// Convert Base64 string to byte array
byte[] imageBytes = Convert.FromBase64String(base64Image);
// Process with IronBarcode
var results = BarcodeReader.Read(imageBytes);
return ProcessResults(results);
}
catch (Exception ex)
{
return BadRequest(new ScanResult
{
Success = false,
ErrorMessage = $"Invalid Base64 data: {ex.Message}"
});
}
}
private ScanResult ProcessResults(BarcodeResults results)
{
if (results.Any())
{
return new ScanResult
{
Success = true,
BarcodeValues = results.Select(r => r.Value).ToList(),
BarcodeFormat = results.First().BarcodeType.ToString()
};
}
return new ScanResult
{
Success = false,
ErrorMessage = "No barcodes detected"
};
}
}
}using Microsoft.AspNetCore.Mvc;
using IronBarCode;
using System.Drawing;
namespace BarcodeScannerAPI.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class ScannerController : ControllerBase
{
// Model for API responses
public class ScanResult
{
public bool Success { get; set; }
public List<string> BarcodeValues { get; set; } = new List<string>();
public string BarcodeFormat { get; set; }
public string ErrorMessage { get; set; }
}
[HttpPost("scan-file")]
public async Task<ActionResult<ScanResult>> ScanFile(IFormFile file)
{
if (file == null || file.Length == 0)
return BadRequest(new ScanResult
{
Success = false,
ErrorMessage = "No file uploaded"
});
try
{
using var stream = new MemoryStream();
await file.CopyToAsync(stream);
// Configure scanner options for better accuracy
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
ExpectBarcodeTypes = BarcodeEncoding.All
};
// Read barcodes from the uploaded file
var results = BarcodeReader.Read(stream.ToArray(), options);
if (results.Any())
{
return Ok(new ScanResult
{
Success = true,
BarcodeValues = results.Select(r => r.Value).ToList(),
BarcodeFormat = results.First().BarcodeType.ToString()
});
}
return Ok(new ScanResult
{
Success = false,
ErrorMessage = "No barcodes found"
});
}
catch (Exception ex)
{
return StatusCode(500, new ScanResult
{
Success = false,
ErrorMessage = $"Processing error: {ex.Message}"
});
}
}
[HttpPost("scan-base64")]
public ActionResult<ScanResult> ScanBase64([FromBody] string base64Image)
{
try
{
// Convert Base64 string to byte array
byte[] imageBytes = Convert.FromBase64String(base64Image);
// Process with IronBarcode
var results = BarcodeReader.Read(imageBytes);
return ProcessResults(results);
}
catch (Exception ex)
{
return BadRequest(new ScanResult
{
Success = false,
ErrorMessage = $"Invalid Base64 data: {ex.Message}"
});
}
}
private ScanResult ProcessResults(BarcodeResults results)
{
if (results.Any())
{
return new ScanResult
{
Success = true,
BarcodeValues = results.Select(r => r.Value).ToList(),
BarcodeFormat = results.First().BarcodeType.ToString()
};
}
return new ScanResult
{
Success = false,
ErrorMessage = "No barcodes detected"
};
}
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comこのコントローラーは、ファイル アップロード用と Base64 エンコードされた画像用の 2 つのエンドポイントを提供します。 ScanFile エンドポイントはマルチパート フォーム データを受け入れ、ユーザーが画像を直接アップロードする Web アプリケーションに最適です。 ストリーム処理は効率的なメモリ使用を保証し、BarcodeReaderOptions の設定は速度と精度のバランスを取ります。
ScanBase64 エンドポイントは、モバイルアプリケーションや API 間通信で一般的な Base64 文字列として画像を送信するシナリオを処理します。 アップロードされた画像またはストリームから 1D および 2D (マトリックス) バーコードの両方を読み取ることができます。
出力
まず、Swagger を使用してエンドポイントをテストします。 こちらでスキャナー API のエンドポイントを確認できます:
[16] 
テストし、出力を確認しましょう。 この例では、単純な文字列値"Hello World"でエンコードされたサンプルバーコード画像を使用します。 ご覧のとおり、プログラムはバーコードを正しくスキャンし、そのデータを取得しました。
[17] 
[18] ## スキャナーはどのような異なる入力ソースを処理できますか?
IronBarcode の柔軟性は、さまざまな入力形式を処理する際に際立ちます。 標準画像に加えて、スキャナー API は PDF、アップロードストリーム、および複数のグラフィック形式を処理します:
// Scanning PDFs with multiple pages
[HttpPost("scan-pdf")]
public async Task<ActionResult<ScanResult>> ScanPdf(IFormFile pdfFile
{
using var stream = new MemoryStream();
await pdfFile.CopyToAsync(stream);
// ReadPdf method handles multi-page documents
var results = BarcodeReader.ReadPdf(stream.ToArray());
return ProcessResults(results);
}
// Processing from URL
[HttpPost("scan-url")]
public async Task<ActionResult<ScanResult>> ScanFromUrl([FromBody] string imageUrl)
{
using var client = new HttpClient();
var imageBytes = await client.GetByteArrayAsync(imageUrl);
var results = BarcodeReader.Read(imageBytes);
return ProcessResults(results);
}// Scanning PDFs with multiple pages
[HttpPost("scan-pdf")]
public async Task<ActionResult<ScanResult>> ScanPdf(IFormFile pdfFile
{
using var stream = new MemoryStream();
await pdfFile.CopyToAsync(stream);
// ReadPdf method handles multi-page documents
var results = BarcodeReader.ReadPdf(stream.ToArray());
return ProcessResults(results);
}
// Processing from URL
[HttpPost("scan-url")]
public async Task<ActionResult<ScanResult>> ScanFromUrl([FromBody] string imageUrl)
{
using var client = new HttpClient();
var imageBytes = await client.GetByteArrayAsync(imageUrl);
var results = BarcodeReader.Read(imageBytes);
return ProcessResults(results);
}IRON VB CONVERTER ERROR developers@ironsoftware.comReadPdf メソッドは、PDF ドキュメント内のすべてのページを自動的にスキャンし、出荷ラベル、請求書、または複数ページのレポートからバーコードを抽出します。 URL ベースのスキャンの場合、API はリモート画像を取得し、ローカル保存を必要とせずに処理します。これは、クラウド ストレージ サービスとの統合や外部システムからの画像処理に最適です。
新しいエンドポイントを持つ最新の Swagger UI を確認できます:
[19] 
新しいメソッドをテストするために、2 つのサンプルバーコードを含む例の PDF を使用しました。
[20] 
最初のバーコードは URL を含む基本的なバーコードであり、2 番目は前回の例の基本的な文字列エンコードのバーコードです。 エンドポイントを通じて PDF を実行した際の出力はこちらです:
[21] 
ご覧のとおり、両方のバーコードを正しく検出し、スキャンしたバーコードからデータを抽出しました。
[22] ## パフォーマンスと精度のためにバーコードスキャナーを最適化する
特定のユースケースに合わせたスキャナーの微調整が速度と精度を大幅に向上させます:
var optimizedOptions = new BarcodeReaderOptions
{
// Speed settings: Faster, Balanced, Detailed, ExtremeDetail
Speed = ReadingSpeed.Detailed,
// Specify expected barcode types to reduce processing time
ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128,
// Enable parallel processing for batch operations
Multithreaded = true,
MaxParallelThreads = 4,
// Define scanning area to focus on specific regions
CropArea = new Rectangle(100, 100, 400, 200), // Optional: define specific scanning area
// Apply image corrections for damaged barcodes
ImageFilters = new ImageFilterCollection() {
new SharpenFilter(),
new ContrastFilter()
}
};var optimizedOptions = new BarcodeReaderOptions
{
// Speed settings: Faster, Balanced, Detailed, ExtremeDetail
Speed = ReadingSpeed.Detailed,
// Specify expected barcode types to reduce processing time
ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128,
// Enable parallel processing for batch operations
Multithreaded = true,
MaxParallelThreads = 4,
// Define scanning area to focus on specific regions
CropArea = new Rectangle(100, 100, 400, 200), // Optional: define specific scanning area
// Apply image corrections for damaged barcodes
ImageFilters = new ImageFilterCollection() {
new SharpenFilter(),
new ContrastFilter()
}
};IRON VB CONVERTER ERROR developers@ironsoftware.com注: CropArea プロパティを使用すると、スキャナーは画像内の特定のマトリックスまたはテーブル領域に焦点を合わせることができます。 ただし、いくつかのオブジェクトやバーコードの位置が定義された領域の外にある場合、スキャナーが失敗する可能性があります。 このような場合は、CropArea プロパティを削除またはコメントアウトしてください。 IronBarcode は、デフォルトのフル画像ですべてのバーコード データを識別してデコードし、スキャナーが任意の Windows または Microsoft ランタイム シナリオを処理できることを保証します。
既知のスキャナータイプに最適化されたオプションを使用すると、処理時間が短縮されます。埋め込み画像フィルターを使用すると、低品質の入力に対するスキャンされたバーコードの可読性が向上します。 開発者はスキャナー SDK を設定し、利用可能なスキャナーを列挙し、UI コンポーネントまたはビデオキャプチャデバイスを統合できます。
まとめ
IronBarcode を使用した C# スキャナー API の構築により、複雑なバーコード処理が簡単な REST エンドポイントに変換されます。 このライブラリは、完璧なデジタルバーコードから挑戦的な実際のキャプチャまで、すべてを処理し、ファームウェア依存のない企業レベルの精度を提供します。
複数の入力形式のサポート、高度な画像補正、最適化されたパフォーマンス設定を備え、開発者は数分でプロダクション準備が整ったスキャン ソリューションを展開できます。 [23] 無料トライアルを開始して、今日スキャナーAPIを実装するか、バッチ処理や機械学習による検出のような高度な機能については、完全なドキュメントを探索してください。
よくある質問
C#でスキャナーAPIを構築するためにIronBarcodeを使用する主な利点は何ですか?
IronBarcodeは、開発者が強力で実用的なバーコードスキャナーAPIを迅速に作成できるようにし、複雑さを最小限に抑えます。複雑なスキャナーSDKの統合を排除することで、プロセスを簡素化します。
IronBarcodeは損傷したバーコード入力を処理できますか?
はい、IronBarcodeは、実際のアプリケーションで高信頼性を確保するために、損傷したスキャン入力からのバーコードデータでも処理するように設計されています。
C#スキャナーAPIでIronBarcodeが処理できる入力タイプは何ですか?
IronBarcode は、画像や PDF などのさまざまな入力からバーコードデータを処理でき、異なるスキャンニーズに対応する柔軟なソリューションを提供します。
IronBarcodeを使用してバーコードスキャナーAPIを構築するためのチュートリアルはありますか?
はい、このウェブページには、IronBarcodeを使用してRESTfulバーコードスキャンエンドポイントを構築するためのコード例を含む包括的なチュートリアルが提供されています。
IronBarcodeを使用してバーコードスキャナーAPIをどのくらい早く設定できますか?
IronBarcodeを使用することで、開発者は数分でバーコードスキャナーAPIを設定でき、開発時間と労力を合理化できます。
IronBarcodeは複雑なSDK統合を必要としますか?
いいえ、IronBarcodeは、複雑なスキャナーSDKの統合を排除し、開発者がバーコードスキャン機能を実装しやすくします。
IronBarcodeを使用してスキャナーAPIを構築する言語は何ですか?
IronBarcodeは、.NETフレームワークを活用して堅牢なパフォーマンスを実現するために、C#で使用されます。






