C# で画像からバーコードを読む方法

C#を使用して画像からBarCodeを読み取る方法</#35;

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronBarcodeは、BarcodeReader.Read()を使用することで、C#のたった1行のコードで画像からBarCodeを読み取ることができます。PNG、JPEG、GIF、BMP、TIFF、SVGを含む複数の画像形式に対応しており、パフォーマンスと精度を向上させるためのカスタマイズ可能なオプションも備えています。

IronBarcode の主な機能の 1 つは、複数の画像形式でバーコードをすぐに読み取る能力です。 現在、IronBarcode がサポートしている画像形式は次の通りです:

  • スケーラブル・ベクター・グラフィック (SVG)
  • ジョイントフォトグラフィックエキスパーツグループ (JPEG)
  • ポータブル・ネットワーク・グラフィックス (PNG)
  • グラフィックス・インターチェンジ・フォーマット (GIF)
  • タグ付画像ファイル形式 (TIFF)
  • ビットマップ画像ファイル (BMP)

This is made possible with the help of our open source library, IronDrawing. サポートされているバーコード形式の完全なリスト(1Dと2Dの両方のタイプを含む)については、当社の包括的なドキュメントを参照してください。

クイックスタート:画像から数秒でBarCodeを読み取る

IronBarCode.BarcodeReader.Read() を1回呼び出すだけで、PNG、JPEG、GIF、BMP、TIFFなどの画像ファイル形式からBARCODEデータを直接抽出できます。 複雑なセットアップなしですぐに始まります - 結果が即座に得られます。

  1. IronBarcode をNuGetパッケージマネージャでインストール

    PM > Install-Package BarCode
  2. このコード スニペットをコピーして実行します。

    var results = IronBarCode.BarcodeReader.Read("path/to/image.png");
  3. 実際の環境でテストするためにデプロイする

    今日プロジェクトで IronBarcode を使い始めましょう無料トライアル

    arrow pointer

画像から直接 BarCode を読み取るにはどうすればよいですか?

IronBarcodeを使ったバーコードの読み取り方法はこちらです。 PDF 処理やバッチ操作の高度なテクニックを含む、reading barcodes in C# / .NET の包括的なチュートリアルについては、詳細ガイドをご覧ください:

:path=/static-assets/barcode/content-code-examples/how-to/read-barcodes-from-images-1.cs
using IronBarCode;
using System;

var myBarcode = BarcodeReader.Read(@"image_file_path.jpg"); //image file path

foreach (var item in myBarcode)
{
    Console.WriteLine(item.ToString());
}
Imports IronBarCode
Imports System

Private myBarcode = BarcodeReader.Read("image_file_path.jpg") 'image file path

For Each item In myBarcode
	Console.WriteLine(item.ToString())
Next item
$vbLabelText   $csharpLabel
Sample QR code with finder patterns for testing barcode reading from images
サンプルテストQRコード
Sample barcode with black vertical lines on white background for testing image-based barcode reading
サンプルテストバーコード

サンプルのバーコード値が何なのか知りたいですか?コードスニペットで試してみてください!

IronBarcode を使用するには、まず Microsoft Visual Studio NuGet パッケージマネージャーを通じて IronBarcode ライブラリをプロジェクトにインストールする必要があります。以下の画像に示されています。 これにより、IronBarcodeのBarcodeReader.Read()メソッドを利用して、BARCODE画像を直接読み取ることが可能になります。

IronBarcodeは、プロジェクト内に既に含まれている画像ファイルを読み込む際に、メソッドのパラメータとしてファイル名文字列またはファイルパス文字列を指定するだけでBarcodeReader.Read()を使用できるため、シンプルさを提供します。 メソッド内でファイルパスを指定する際は、複数のエスケープ文字"\"をファイルパス文字列に追加するのを避けるために、逐号文字列リテラル"@"を使用するのがベストプラクティスです。

Values() メソッドを BarcodeReader.Read() メソッド呼び出しの最後に追加すると、BARCODEの値を System.String[] オブジェクトとして取得できます。

結果をコンソールに出力するには、foreach ループを使用して string[] 配列に格納された値を反復処理し、ループブロック内で、反復子変数をパラメータとして Console.WriteLine() メソッドを呼び出します。

IronBarcodeは、1次元バーコード形式(Aztec, DataMatrix, QRCode)もサポートしています。

より良いパフォーマンスのために BarCode リーダー オプションを設定するにはどうすればよいですか?

バーコードリーディングが遅すぎますか? 画像でバーコードが小さすぎて、IronBarcode が読み取れないですか? 画像の特定の領域のみを読み取りたいですか? バーコードが混在している画像で特定の種類のバーコードのみを読み取りたいですか? 全体の読み取りパフォーマンスを改善したいですか?

BarcodeReaderOptions を使用すると、ユーザーはバーコードリーダーの動作を微調整して、これらの問題をすべて解決することができます。 BARCODEリーダーのオプション設定に関する詳細な例については、当社の包括的なガイドをご覧ください。以下のセクションでは、BarcodeReaderOptions で利用可能なすべての調整可能なプロパティについて、一つずつ解説します。

画像のどの領域を読み取るかを指定するにはどうすればよいですか?

CropArea は、BarcodeReaderOptions で利用可能な IronSoftware.Drawing.CropRectangle 型のプロパティであり、ユーザーが IronBarcode に読み取らせる画像内の領域を指定できるようにします。 これは読み取りパフォーマンスの向上に役立ちます。なぜなら、読み取り範囲が指定されたため、バーコードリーダーが画像全体をスキャンしてバーコードを探すことを避け、読み取りの精度も向上します。 最適なパフォーマンスを得るためのクロップ・リージョンの指定方法については、こちらをご覧ください。

CropArea プロパティを設定するには、新しい Rectangle 型のオブジェクトをインスタンス化し、引数として矩形の座標、幅、および高さを指定するだけです。 測定単位はピクセル(px)です。

// Example of setting CropArea
var cropArea = new IronSoftware.Drawing.Rectangle(x: 100, y: 100, width: 300, height: 300);
var options = new BarcodeReaderOptions()
{
    CropArea = cropArea
};
// Example of setting CropArea
var cropArea = new IronSoftware.Drawing.Rectangle(x: 100, y: 100, width: 300, height: 300);
var options = new BarcodeReaderOptions()
{
    CropArea = cropArea
};
Imports IronSoftware.Drawing

' Example of setting CropArea
Dim cropArea As New Rectangle(x:=100, y:=100, width:=300, height:=300)
Dim options As New BarcodeReaderOptions() With {
    .CropArea = cropArea
}
$vbLabelText   $csharpLabel

より速く読み取るには、どのバーコードタイプを指定すればよいですか?

デフォルトでは、IronBarcode でサポートされているすべてのバーコードが画像でスキャンされます。 しかし、ユーザがどのような種類のバーコードが利用可能か、または画像で読み取りたいかを知っている場合、特定の種類のバーコードのみを読み取るようにこのプロパティを設定すると、バーコードリーダはバーコードを解釈して読み取るためにバーコードのコレクションを反復する必要がなくなるため、読み取りパフォーマンスと精度が大幅に向上します。

このプロパティを使用するには、ExpectBarcodeTypesBarcodeEncoding 列挙型のいずれかのフィールドに設定するだけです。 以下に、IronBarcode がサポートしているすべてのバーコードタイプの例を示します。

// Example: Expect only QR codes and Code128
var options = new BarcodeReaderOptions()
{
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128
};
// Example: Expect only QR codes and Code128
var options = new BarcodeReaderOptions()
{
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128
};
' Example: Expect only QR codes and Code128
Dim options As New BarcodeReaderOptions() With {
    .ExpectBarcodeTypes = BarcodeEncoding.QRCode Or BarcodeEncoding.Code128
}
$vbLabelText   $csharpLabel

前述の例と説明を含むバーコードタイプのリストです。

いつ複数の BarCode 読み取りを無効にすべきですか?

IronBarcode は画像内の利用可能なすべてのバーコードをデフォルトでスキャンします。これには画像ファイル全体のスキャンが含まれ、読み取ったバーコード値を文字列配列に追加します。 しかし、ユーザーが画像ファイル内の複数のバーコードを読み取りたくない場合は、このプロパティを false に設定できます。これにより、バーコード値が見つかった時点でバーコードリーダーはスキャンを中止します。 これもまた、IronBarcode のパフォーマンスと読み取り速度の改善につながります。 複数の BarCode を読み取るの詳細については、専用のガイドを参照してください。

画像フィルタはバーコード認識をどのように向上させますか?

BarcodeReaderOptions に追加できるプロパティの一つに、画像フィルターのコレクションがあります。 画像フィルタは IronBarcode に入力される生の画像を前処理するために重要です。 ImageFilterコレクションを初期化し、指定する必要があります。 フィルター アプリケーションを含む、画像補正技術に関する包括的なガイダンスについては、チュートリアルをご覧ください。

パフォーマンスを向上させるためにスレッドを最適化するにはどうすればよいですか?

IronBarcode はユーザーにパラレルスレッド実行量を有効化および調整することを可能にし、これによりプロセスの速度と効率が向上します。 並列スレッドとは、異なるプロセッサコアで同時に複数のスレッドを実行することを意味します。 IronBarcode の MaxParallelThread プロパティのデフォルト値は 4 です。ユーザーは、マシンの性能やリソース量に応じてこの値を調整できます。

マルチスレッド処理を有効にしますか?

このプロパティは、IronBarcode が複数の画像を並行して読み取ることを可能にします。 Multithreaded のデフォルト値は true であるため、バッチBarCode読み取りタスクのパフォーマンスを向上させるために、複数のスレッドが自動的に管理されます。

なぜ誤検出を削除する必要があるのでしょうか

このプロパティは偽陽性バーコード読み取りを除去します。 偽陽性バーコード読み取りは、バーコード値の誤読を意味するが、有効として識別されます。 これはシーケンシングプロセスでのエラーやバーコードラベリングや準備プロセスでのエラーにより起こる可能性があります。 したがって、RemoveFalsePositive を true に設定すると、誤検知された BARCODE 読み取りが除外され、BARCODE の読み取り精度が向上します。 しかし、ユーザーが精度の代わりにパフォーマンスを選ぶ場合、このプロパティを false に設定すると助けになるでしょう。このプロパティのデフォルト値は true です。

MinScanLinesは検出精度にどのような影響を与えますか?

MinScanLines は、BARCODEの結果を有効とみなすために、一致しなければならないスキャンラインの最小数を設定します。 デフォルト値は 2 です。この値を大きくすると誤検出は減りますが、薄かったり品質の低い BARCODE が検出されなくなる可能性があります。 感度を1に下げると、ノイズが発生するリスクはあるものの、読み取りにくいBARCODEに対する感度が向上します。

どのようなスキャン モードがさまざまな使用ケースで利用できますか?

IronBarcode が画像内でバーコードをスキャンし検出する方法を定義します。

  • Auto: バーコードを自動画像前処理と最適なリーダーオプションの構成で読み取ります。 最良の結果とパフォーマンスのために推奨されます。
  • OnlyDetectionModel: 画像内のバーコードをスキャンし、それらの位置を IronSoftware.Drawing.PointF の配列として返します。 このモードは検出されたバーコードを読みません; それはそれぞれのバーコードの位置のみを返します。
  • MachineLearningScan: 機械学習検出でバーコードをスキャンして読みます。
  • OnlyBasicScan: 機械学習検出、画像自動前処理、またはリーダーオプションの構成なしでバーコードを読み取ります。 This option can be used with IronBarCode.Slim alone.

読み取り速度の設定は精度にどのように影響しますか?

名前が示すように、Speedプロパティは、ユーザーがIronBarcodeリーダーのパフォーマンスをさらに最適化できるようにしています。 RemoveFalsePositive プロパティに類似し、このプロパティを調整することで、パフォーマンスを精度のコストで改善します。 パフォーマンスのベンチマークを含む、読み込み速度のオプションの詳細については、詳細ガイドをご覧ください。これはReadingSpeed列挙型を受け付けます:

  • Faster: 最速のバーコード読み取りを有効にするが、精度を下げる。 このプロセスは画像の前処理をスキップし、しばしば空のバーコード結果をもたらします。 この設定を使用するのは、入力画像がシャープで明確な場合のみです。
  • バランス: この設定は、Speed プロパティに推奨されます。 それは精度と読み取りパフォーマンスのバランスをとり、画像に軽い処理を試みて、バーコードエリアを明確にし、バーコードリーダーが検出できるようにします。 ほとんどの場合、この設定はIronBarcodeがバーコード画像を読み取り、正確な出力を生成するのに十分です。
  • 詳細: ReadingSpeed.Balanced 設定を使用しても読み取り結果から BARCODE 値を生成できない場合、ユーザーは ReadingSpeed.Detailed を使用することを選択できます。 IronBarcode は中程度の処理を画像に行い、バーコードエリアをさらに明確にして、バーコードリーダーが検出できるようにします。 この設定は、小さなまたはあまり鮮明でないバーコード画像を検出するのに非常に便利です。
  • ExtremeDetail: この設定は非常に CPU 集中なプロセスのため 最も推奨されません。 重い処理がバーコード画像に施され、リーダーがバーコードを読み取るようになります。 ユーザーはこの設定を選ぶ前にイメージ前処理を行うこと/画像にフィルタを適用することを推奨されます。

Code39拡張モードはいつ使用すべきですか?

この設定により、Code39 型バーコードは拡張モードで読み取られ解釈され、完全な ASCII 文字セットが適用されます。 UseCode39ExtendedModetrue に設定すると、Code39 BARCODE の読み取り精度が向上します。

カスタム オプションを使用して高度な BarCode 読み取り機能を実装するには?

パフォーマンスや精度を向上させるためであれ、ユーザーが微調整できるすべてのオプションを学んだので、コードに適用する方法を紹介しよう。 以下のコードスニペットは、BarcodeReaderOptionsの包括的な使用例を示しています:

using IronBarCode;
using IronSoftware.Drawing;
using System;
using System.Linq;

// Create custom reader options
var options = new BarcodeReaderOptions()
{
    // Specify expected barcode types for better performance
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128 | BarcodeEncoding.Code39,

    // Define specific area to scan (x, y, width, height in pixels)
    CropArea = new Rectangle(100, 100, 500, 400),

    // Set reading speed to balance accuracy and performance
    Speed = ReadingSpeed.Balanced,

    // Enable multithreading for better performance
    Multithreaded = true,
    MaxParallelThreads = 4,

    // Remove false positives for accuracy
    RemoveFalsePositive = true,

    // Minimum scan lines that must agree for a valid result (default 2)
    MinScanLines = 1,

    // Enable Code39 extended mode if needed
    UseCode39ExtendedMode = true,

    // Set scan mode
    ScanMode = BarcodeReaderScanMode.Auto,

    // Add image filters for better recognition
    ImageFilters = new ImageFilterCollection() { 
        new SharpenFilter(),
        new InvertFilter(),
        new ContrastFilter()
    }
};

// Read barcodes with custom options
var results = BarcodeReader.Read(@"C:\path\to\your\barcode-image.png", options);

// Process results
if (results.Any())
{
    foreach (var barcode in results)
    {
        Console.WriteLine($"Barcode Type: {barcode.BarcodeType}");
        Console.WriteLine($"Value: {barcode.Value}");
        Console.WriteLine($"Confidence: {barcode.Confidence}%");
        Console.WriteLine($"Position: X={barcode.X}, Y={barcode.Y}");
        Console.WriteLine("---");
    }
}
else
{
    Console.WriteLine("No barcodes found in the image.");
}
using IronBarCode;
using IronSoftware.Drawing;
using System;
using System.Linq;

// Create custom reader options
var options = new BarcodeReaderOptions()
{
    // Specify expected barcode types for better performance
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128 | BarcodeEncoding.Code39,

    // Define specific area to scan (x, y, width, height in pixels)
    CropArea = new Rectangle(100, 100, 500, 400),

    // Set reading speed to balance accuracy and performance
    Speed = ReadingSpeed.Balanced,

    // Enable multithreading for better performance
    Multithreaded = true,
    MaxParallelThreads = 4,

    // Remove false positives for accuracy
    RemoveFalsePositive = true,

    // Minimum scan lines that must agree for a valid result (default 2)
    MinScanLines = 1,

    // Enable Code39 extended mode if needed
    UseCode39ExtendedMode = true,

    // Set scan mode
    ScanMode = BarcodeReaderScanMode.Auto,

    // Add image filters for better recognition
    ImageFilters = new ImageFilterCollection() { 
        new SharpenFilter(),
        new InvertFilter(),
        new ContrastFilter()
    }
};

// Read barcodes with custom options
var results = BarcodeReader.Read(@"C:\path\to\your\barcode-image.png", options);

// Process results
if (results.Any())
{
    foreach (var barcode in results)
    {
        Console.WriteLine($"Barcode Type: {barcode.BarcodeType}");
        Console.WriteLine($"Value: {barcode.Value}");
        Console.WriteLine($"Confidence: {barcode.Confidence}%");
        Console.WriteLine($"Position: X={barcode.X}, Y={barcode.Y}");
        Console.WriteLine("---");
    }
}
else
{
    Console.WriteLine("No barcodes found in the image.");
}
Imports IronBarCode
Imports IronSoftware.Drawing
Imports System
Imports System.Linq

' Create custom reader options
Dim options As New BarcodeReaderOptions() With {
    ' Specify expected barcode types for better performance
    .ExpectBarcodeTypes = BarcodeEncoding.QRCode Or BarcodeEncoding.Code128 Or BarcodeEncoding.Code39,

    ' Define specific area to scan (x, y, width, height in pixels)
    .CropArea = New Rectangle(100, 100, 500, 400),

    ' Set reading speed to balance accuracy and performance
    .Speed = ReadingSpeed.Balanced,

    ' Enable multithreading for better performance
    .Multithreaded = True,
    .MaxParallelThreads = 4,

    ' Remove false positives for accuracy
    .RemoveFalsePositive = True,

    ' Minimum scan lines that must agree for a valid result (default 2)
    .MinScanLines = 1,

    ' Enable Code39 extended mode if needed
    .UseCode39ExtendedMode = True,

    ' Set scan mode
    .ScanMode = BarcodeReaderScanMode.Auto,

    ' Add image filters for better recognition
    .ImageFilters = New ImageFilterCollection() From {
        New SharpenFilter(),
        New InvertFilter(),
        New ContrastFilter()
    }
}

' Read barcodes with custom options
Dim results = BarcodeReader.Read("C:\path\to\your\barcode-image.png", options)

' Process results
If results.Any() Then
    For Each barcode In results
        Console.WriteLine($"Barcode Type: {barcode.BarcodeType}")
        Console.WriteLine($"Value: {barcode.Value}")
        Console.WriteLine($"Confidence: {barcode.Confidence}%")
        Console.WriteLine($"Position: X={barcode.X}, Y={barcode.Y}")
        Console.WriteLine("---")
    Next
Else
    Console.WriteLine("No barcodes found in the image.")
End If
$vbLabelText   $csharpLabel

コードスニペットからわかるように、BarcodeReaderOptionsのプロパティを決定し、調整する必要があります。 初期化された BarcodeReaderOptions は、画像ファイルと共に BarcodeReader.Read() メソッドの引数として使用できます。これにより、画像から BARCODE を読み取る際に BarcodeReaderOptions のすべての設定が適用されます。

BarCodeが認識されないという問題が発生した場合、当社のトラブルシューティングガイドでは、一般的な問題の解決策とバーコードスキャンの精度を高めるためのヒントを提供しています。

よくある質問

C# での BarCode 読み取りに対応している画像形式は?

IronBarcodeはSVG(Scalable Vector Graphics)、JPEG、PNG、GIF、TIFF(Tagged Image File Format)、BMP(Bitmap Image File)など複数の画像フォーマットからのバーコード読み取りをサポートしています。この包括的なフォーマットのサポートはIronDrawingによって行われ、様々な種類の画像からシームレスにバーコードを抽出することができます。

たった1行のコードで、画像ファイルから BarCode を読み取るにはどうすればよいですか?

IronBarcodeを使用すると、1行のコードで画像からバーコードを読み取ることができます:var results = IronBarCode.BarcodeReader.Read("path/to/image.png");`.このシンプルなメソッド呼び出しは、複雑な設定をすることなく、PNG、JPEG、GIF、BMP、TIFFファイルからバーコードデータを自動的に検出して抽出します。

画像を読み取る際に、どの種類の BarCode を検索するかを指定できますか?

はい、IronBarcodeではBarcodeReaderOptionsのExpectBarcodeTypesプロパティを使ってバーコードタイプを指定することができます。このターゲットを絞ったアプローチにより、イメージで見つかると予想されるバーコード形式のみに焦点を当てることで、読み取りパフォーマンスが向上します。

画像内の特定の領域から BarCode を読み取ることはできますか?

もちろんです!IronBarcodeはCropAreaプロパティを提供し、バーコードが配置される画像内の特定の領域を指定することができます。この機能は、大きな画像やバーコードのおおよその位置が分かっている場合に特に便利で、処理速度を大幅に向上させます。

精度を高めるために、高度な読み取り設定を行うにはどうすればよいですか?

IronBarcodeは高度な読み取り設定を構成するためにBarcodeReaderOptionsクラスを提供しています。これには、バーコード検出感度、画像前処理、および困難な画像や特定のバーコードタイプを扱う際の精度を向上させるその他のパラメータをカスタマイズするためのオプションが含まれています。

C#開発者が画像からBarCodeを簡単に読み取れるのはなぜですか?

IronBarcodeはBarcodeReader.Read()メソッドを提供することでバーコードの読み取りを簡素化します。開発者はファイル名またはファイルパスをパラメータとして指定するだけでよく、C#アプリケーションにバーコード読み取り機能を統合するのは驚くほど簡単です。

Hairil Hasyimi Bin Omar
ソフトウェアエンジニア
すべての優れたエンジニアのように、ハイリルは熱心な学習者です。彼はC#、Python、Javaの知識を磨き、その知識を活用してIron Softwareのチームメンバーに価値を追加しています。ハイリルはマレーシアのマラ工科大学からIron Softwareのチームに参加し、化学およびプロセス工学の学士号を取得しました。
準備はできましたか?
Nuget ダウンロード 2,143,620 | バージョン: 2026.4 リリース
Still Scrolling Icon

まだスクロールしていますか?

すぐに証拠が欲しいですか? PM > Install-Package BarCode
サンプルを実行する 文字列が BarCode になるのを見る。