QR コードは、ユーザー認証、モバイル決済、商品パッケージ、イベントチケットなど、現代の多くのアプリケーションで広く利用されています。これらのシーンにおいて、特にスキャン画像やアップロードファイルを処理する際、C# で QR コードを読み取るニーズは高まっています。 そのためには、精度が高く、実装が簡単なデコード手法が必要です。本チュートリアルでは、C# を使って画像から QR コードを読み取るシンプルな方法を紹介します。セットアップも少なく、簡潔に統合できます。 目次 プロジェクトの準備 C# で画像から QR コードを読み取る C# でストリームから QR コードを読み取る 精度向上とエラー処理 おまけ: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#による読み取り結果: 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 コードのデータと頂点座標(四隅)が取得できます。 読み取り結果: 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 の全機能を体験してください。