チュートリアル

簡単にライブラリーを使用するためのチュートリアルコレクション

チュートリアル».NET»Spire.Barcode for .NET»C# で QR コードを読み取る方法(画像・ストリーム対応)
2025-07-04

C# で QR コードを読み取る方法(画像・ストリーム対応)

C#でQRコードを読み取るチュートリアルのカバー画像(バーコードスキャナーとコード)

QR コードは、ユーザー認証、モバイル決済、商品パッケージ、イベントチケットなど、現代の多くのアプリケーションで広く利用されています。これらのシーンにおいて、特にスキャン画像やアップロードファイルを処理する際、C# で QR コードを読み取るニーズは高まっています。

そのためには、精度が高く、実装が簡単なデコード手法が必要です。本チュートリアルでは、C# を使って画像から QR コードを読み取るシンプルな方法を紹介します。セットアップも少なく、簡潔に統合できます。

目次

1. プロジェクトの準備

まず、QR コードの読み取りに対応した .NET 向けバーコードライブラリを使用します。ここでは、画像ファイルやストリームから QR コードを読み取る簡単なAPIを提供する Spire.Barcode for .NET を使用します。

1.1 NuGet経由でライブラリをインストール

以下のコマンドで NuGet からインストールできます:

Install-Package Spire.Barcode

基本的な用途であれば、Free Spire.Barcode for .NET も利用可能です:

Install-Package FreeSpire.Barcode

1.2 コンソールアプリケーションの作成

デモとして、Visual Studio で C# コンソールアプリを作成します:

  • 対応フレームワーク:.NET Framework, .NET Core/.NET 6+, ASP.NET, Xamarin(クロスプラットフォーム対応)
  • NuGetを使わない場合は、Spire.Barcode.dll への参照を追加します

2. C# で画像から QR コードを読み取る

C# で画像ファイルから QR コードを読み取るには、ライブラリが提供する静的メソッド BarcodeScanner.Scan() を使用します。このメソッドは画像のパスと BarCodeType を引数として受け取り、指定したバーコードタイプ(ここでは QR コード)に一致するすべての結果を返します。

この方法は、JPG、PNG、EMF 形式の画像に対応しており、デスクトップアプリやファイルアップロードを処理するバックエンドサービスに最適です。

2.1 サンプルコード:画像ファイルからQRコードをデコード

using Spire.Barcode;

class Program
{
    static void Main(string[] args)
    {
        // QRコード画像を読み込む
        string imagePath = @"C:\qr-code.png";

        // QRコードをスキャン
        string[] results = BarcodeScanner.Scan(imagePath, BarCodeType.QRCode);

        // 結果を表示
        foreach (string result in results)
        {
            Console.WriteLine("QRコードの内容: " + result + "\n");
        }
    }
}

QR コード画像と、C#による読み取り結果:

画像からQRコードを読み取り、コンソールに表示するC#コード

2.2 解説

  • Scan() は、画像内のすべてのバーコードを読み取ってデコードします
  • BarCodeType.QRCode により、QR コードのみを対象とすることができます(他の種類にも変更可能)
  • QR コードが複数含まれている場合でも、すべて配列で取得可能です

3. C# でストリームから QR コードを読み取る

Web API やモダンなアプリケーションでは、画像を Stream として処理する場面がよくあります。たとえば、アップロードファイルやクラウドストレージからの読み取りなどです。

BarcodeScanner.Scan() メソッドは Stream を直接受け取ることもでき、Bitmap に変換せずにメモリストリームから QR コードを読み取れます。

using Spire.Barcode;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        using (FileStream fs = new FileStream(@"C:\qr-code.png", FileMode.Open, FileAccess.Read))
        {
            // ストリームから直接QRコードを読み取る
            string[] results = BarcodeScanner.Scan(fs, BarCodeType.QRCode, false);
            foreach (string result in results)
            {
                Console.WriteLine("QRコードの内容: " + result);
            }
        }
    }
}

この方法は、WPF や ASP.NET Core アプリでメモリ上で画像を扱う場合に特に便利です。

関連チュートリアル: C# で PDF からバーコードを読み取る方法

4. 精度向上とエラー処理

実際のアプリケーションでは、画像品質や入力の問題により、QR コードの認識に失敗することもあります。以下は、C# での認識精度向上とエラー対策のベストプラクティスです。

4.1 精度を高めるポイント

  • 高解像度の画像を使用し、ぼやけや圧縮を避ける
  • **QR コード周囲の余白(クワイエットゾーン)**を確保する
  • PNG 形式など、劣化の少ない画像形式を使用する
  • 歪みのない正面画像を使う(斜めからの撮影を避ける)

4.2 エラー処理を追加する

try-catch ブロックで処理を囲み、失敗時の例外処理やユーザー通知を行います:

try
{
    string[] results = BarcodeScanner.Scan(imagePath, BarCodeType.QRCode);

    if (results.Length == 0)
    {
        Console.WriteLine("QRコードが見つかりませんでした。");
    }
    else
    {
        Console.WriteLine("QRコード: " + results[0]);
    }
}
catch (Exception ex)
{
    Console.WriteLine("QRコードのデコード中にエラーが発生しました: " + ex.Message);
}

5. おまけ:QR コードの座標を取得する

画像内の QR コードの正確な位置(切り抜き、マーク表示、アノテーション用途など)が必要な場合は、ScanInfo() メソッドを使って座標情報を取得できます:

BarcodeInfo[] results = BarcodeScanner.ScanInfo(imagePath, BarCodeType.QRCode);
foreach (BarcodeInfo result in results)
{
    Console.WriteLine("データ: " + result.DataString);
    Console.WriteLine($"座標: " + string.Join(",", result.Vertexes.Select(p => $"({p.X},{p.Y})")) + "\n");
}

これにより、各 QR コードのデータと頂点座標(四隅)が取得できます。

読み取り結果:

QR コードのデータと座標を取得するC#コード

6. よくある質問(FAQ)

C# で QR コードを読み取るには?

Spire.Barcode for .NET ライブラリの BarcodeScanner.Scan() メソッドを使用することで、画像ファイルやストリームから簡単に QR コードを読み取ることができます。

自分の QR コード画像を読み取るには?

画像ファイルのパスを渡すか、WPF や Web アプリであればストリームとして読み込んでスキャナーに渡します。すべての QR コードが自動的にデコードされます。

QR コード以外のバーコードも読み取れますか?

はい、画像パスを Scan() メソッドに渡すだけで、対応しているすべてのバーコードタイプを自動で読み取れます。特定の種類(例:QR コードや Code128)のみに限定する場合は、BarCodeType を第二引数で指定します。

C# でおすすめのバーコードライブラリは?

Spire.Barcode for .NET は、使いやすさと多様なフォーマット対応、API のシンプルさから人気があります。無料・商用いずれの用途にも対応しています。

7. まとめ

Spire.Barcode for .NET を使用すれば、C# での QR コード読み取りは数行のコードで実装可能です。画像ファイルにもストリームにも対応しており、デスクトップ、サーバーサイド、WPF アプリケーションでも安定して動作します。最小限のセットアップで高性能な読み取り処理が行えます。

QR コードの生成、ドキュメントへの統合、リアルタイムスキャンなどへの応用も可能です。

💡すべてのバーコード読み取り機能を試したい方は、
無料の一時ライセンスを申請して、Spire.Barcode for .NET の全機能を体験してください。

Read 14 times