IRONBARCODEの使用 IronBarcode を使用して C# でバーコードスキャナー API を構築する方法 Jordi Bardia 公開日:9月 29, 2025 Download IronBarcode NuGet Download テキストの検索と置換 Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article これまで、C# スキャナー API を .NET で構築するには、複雑なスキャナー SDK の統合や限られたソフトウェア ライブラリが必要でした。 IronBarcode を使用すると、開発者は数分で強力でプロダクション準備が整ったバーコード スキャナー API を作成できます。 これらは簡単に、画像、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 $vbLabelText $csharpLabel このコードはバーコード画像を読み取り、その値を出力します。 BarcodeReader.Read() メソッドはバーコード形式を自動的に検出し、結果のコレクションを返します。これにより、JPEG、BMP、PNG、TIFF などのサポートされている画像や、配列またはバイナリ データ形式からバーコード データを抽出することが非常に簡単になります。 完全なスキャナー 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 $vbLabelText $csharpLabel このコントローラーは、ファイル アップロード用と Base64 エンコードされた画像用の 2 つのエンドポイントを提供します。 ScanFile エンドポイントはマルチパート フォーム データを受け入れ、ユーザーが画像を直接アップロードする Web アプリケーションに最適です。 ストリーム処理は効率的なメモリ使用を保証し、BarcodeReaderOptions の設定は速度と精度のバランスを取ります。 ScanBase64 エンドポイントは、モバイルアプリケーションや API 間通信で一般的な Base64 文字列として画像を送信するシナリオを処理します。 アップロードされた画像またはストリームから 1D および 2D (マトリックス) バーコードの両方を読み取ることができます。 出力 まず、Swagger を使用してエンドポイントをテストします。 こちらでスキャナー API のエンドポイントを確認できます: IronBarcode を使用して C# でバーコード スキャナー API を構築する方法: 図 1 - Swagger UI と API エンドポイント テストし、出力を確認しましょう。 この例では、単純な文字列値「Hello World」でエンコードされたサンプルバーコード画像を使用します。 ご覧のとおり、プログラムはバーコードを正しくスキャンし、そのデータを取得しました。 IronBarcode を使用して C# でバーコード スキャナー API を構築する方法: 図 2 - 単純なバーコードスキャンの出力 スキャナーはどのような入力ソースを処理できますか? 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.com $vbLabelText $csharpLabel ReadPdf メソッドは、PDF ドキュメント内のすべてのページを自動的にスキャンし、出荷ラベル、請求書、または複数ページのレポートからバーコードを抽出します。 URL ベースのスキャンの場合、API はリモート画像を取得し、ローカル保存を必要とせずに処理します。これは、クラウド ストレージ サービスとの統合や外部システムからの画像処理に最適です。 新しいエンドポイントを持つ最新の Swagger UI を確認できます: IronBarcode を使用して C# でバーコード スキャナー API を構築する方法: 図 3 - 新しいエンドポイントを持つ更新された Swagger UI 新しいメソッドをテストするために、2 つのサンプルバーコードを含む例の PDF を使用しました。 IronBarcode を使用して C# でバーコード スキャナー API を構築する方法: 図 4 - サンプル PDF 最初のバーコードは URL を含む基本的なバーコードであり、2 番目は前回の例の基本的な文字列エンコードのバーコードです。 エンドポイントを通じて PDF を実行した際の出力はこちらです: IronBarcode を使用して C# でバーコード スキャナー API を構築する方法: 図 5 - バーコード出力とともにスキャンされた PDF ご覧のとおり、両方のバーコードを正しく検出し、スキャンされたバーコードからデータを抽出しました。 パフォーマンスと精度のためのバーコード スキャナーの最適化 特定のユースケースに合わせたスキャナーの微調整が速度と精度を大幅に向上させます: 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 $vbLabelText $csharpLabel 注: CropArea プロパティを使用すると、スキャナーは画像内の特定のマトリックスまたはテーブル領域に焦点を合わせることができます。 ただし、いくつかのオブジェクトやバーコードの位置が定義された領域の外にある場合、スキャナーが失敗する可能性があります。 このような場合は、CropArea プロパティを削除またはコメントアウトしてください。 IronBarcode は、デフォルトのフル画像ですべてのバーコード データを識別してデコードし、スキャナーが任意の Windows または Microsoft ランタイム シナリオを処理できることを保証します。 既知のスキャナータイプに最適化されたオプションを使用すると、処理時間が短縮されます。埋め込み画像フィルターを使用すると、低品質の入力に対するスキャンされたバーコードの可読性が向上します。 開発者はスキャナー SDK を設定し、利用可能なスキャナーを列挙し、UI コンポーネントまたはビデオキャプチャデバイスを統合できます。 まとめ IronBarcode を使用した C# スキャナー API の構築により、複雑なバーコード処理が簡単な REST エンドポイントに変換されます。 このライブラリは、完璧なデジタルバーコードから挑戦的な実際のキャプチャまで、すべてを処理し、ファームウェア依存のない企業レベルの精度を提供します。 複数の入力形式のサポート、高度な画像補正、最適化されたパフォーマンス設定を備え、開発者は数分でプロダクション準備が整ったスキャン ソリューションを展開できます。 Get started with a free trial to implement your scanner API today, or explore the complete バーコード スキャナー 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#で使用されます。 Jordi Bardia 今すぐエンジニアリングチームとチャット ソフトウェアエンジニア Jordiは、最も得意な言語がPython、C#、C++であり、Iron Softwareでそのスキルを発揮していない時は、ゲームプログラミングをしています。製品テスト、製品開発、研究の責任を分担し、Jordiは継続的な製品改善において多大な価値を追加しています。この多様な経験は彼を挑戦させ続け、興味を持たせており、Iron Softwareで働くことの好きな側面の一つだと言います。Jordiはフロリダ州マイアミで育ち、フロリダ大学でコンピュータサイエンスと統計学を学びました。 関連する記事 公開日 10月 19, 2025 VB.NETでCrystal Reportsでバーコードを印刷する方法 VB.NETを使用したCrystal Reportsでのバーコード生成と印刷。IronBarcode SDKを使用した信頼できるバーコード統合のステップバイステップのチュートリアル。 詳しく読む 公開日 9月 29, 2025 IronBarcodeと.NETのオープンソースバーコードリーダーの比較 IronBarcodeを使用してC#でバーコードを読む方法 詳しく読む 公開日 9月 29, 2025 ASP.NETアプリケーションでバーコードをスキャンする方法 IronBarcodeを使用してASP.NETでバーコードをスキャンする方法を学びます 詳しく読む C#でバーコード.NETコンポーネントを統合する方法IronBarcodeを使用してMAUIバ...
公開日 10月 19, 2025 VB.NETでCrystal Reportsでバーコードを印刷する方法 VB.NETを使用したCrystal Reportsでのバーコード生成と印刷。IronBarcode SDKを使用した信頼できるバーコード統合のステップバイステップのチュートリアル。 詳しく読む