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#による読み取り結果:
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 の全機能を体験してください。