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

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

IronQRは画像をIronDrawingで読み込み、QrImageInputオブジェクトを作成し、BarcodeReader.Readメソッドを使ってQRデータを効率的にデコードすることで、開発者がC#で様々な画像フォーマットからQRコードを読み取ることを可能にします。

クイックスタート: C#で画像からQRコードを読み取る

異なる画像フォーマットから QR コードを読み取るには?

IronQRは様々な画像フォーマットからのQRコード読み取りをサポートしています。 この機能は、高度な機械学習モデルを使用して、さまざまなメディアタイプにわたって正確なデコードを保証します。サポートされているフォーマットは次のとおりです:

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

このフォーマットのサポートは、画像処理を効率的に処理するオープンソースライブラリIronDrawingによって実現されています。 デジタルカメラ、スキャナ、モバイル機器、WebダウンロードからのQRコードを、フォーマット変換なしで処理できます。

画像スキャンをテストするための四角形とデータモジュールの位置決めを示す、白黒のパターンが明確なサンプルQRコード

Nuget Icon今すぐ NuGet で PDF を作成してみましょう:

  1. NuGet パッケージ マネージャーを使用して IronQR をインストールします

    PM > Install-Package IronQR

  2. このコード スニペットをコピーして実行します。

    // Import necessary IronQR and IronDrawing namespaces
    using IronSoftware.Drawing; 
    using IronBarcode;
    
    public class QRCodeReader
    {
        public static void Main()
        {
            // Load an image from a file path
            using (var inputImage = Image.FromFile("path/to/your/image/file.webp"))
            {
                // Create a QrImageInput object from the image
                var qrImageInput = new QrImageInput(inputImage);
    
                // Decode the QRコード from the image
                var result = BarcodeReader.Read(qrImageInput);
    
                // Iterate through each detected QRコード and display its information
                foreach (var barcodeResult in result.Barcodes)
                {
                    Console.WriteLine($"QR Code Data: {barcodeResult.Value}");
                }
            }
        }
    }
  3. 実際の環境でテストするためにデプロイする

    今すぐ無料トライアルでプロジェクトに IronQR を使い始めましょう
    arrow pointer

注: "path/to/your/image/file.webp"を QR コード画像ファイルへの実際のパスに置き換えます。

サンプル画像の QR コードの値について知りたいですか? コード スニペットを使って試してみてください。

なぜIronQRは複数の画像フォーマットをサポートしているのですか?

QRコードの読み取りとは、QRコードに格納された情報をスキャンして解読することです。 これは通常、QRコードのデータを解釈できるソフトウェアと組み合わせたカメラまたはスキャナを使用して行われます。 QR コードに含まれる情報には、テキスト、URL、連絡先の詳細、その他の形式のデータなどがあります。

IronQRのマルチフォーマット対応は、マーケティング資料や製品パッケージからデジタル文書やウェブコンテンツまで、QRコードが様々な文脈で登場する実世界のアプリケーションに不可欠です。 IronQRは多様なフォーマットをサポートすることで、開発者が画像フォーマットの互換性を心配することなく、堅牢なアプリケーションを構築できることを保証します。 IronQRの読込み機能の詳細については、この柔軟性がどのように開発ワークフローを向上させるかをご理解ください。

それぞれの画像形式はいつ使うべきですか?

QRコード処理では、画像形式によって目的が異なります:

  • PNG:透明性が必要なQRコードや、画質が最優先される場合に最適です。 PNGの可逆圧縮により、QRコードのパターンは鮮明で読みやすいままです。
  • JPEG:QRコードを含む写真や、ファイルサイズが気になる場合に最適です。 圧縮アーチファクトが可読性に影響するのを防ぐため、より高い品質設定(80%以上)を使用してください。
  • TIFF:アーカイブ目的や、企業環境でスキャンした文書を扱う場合に最適です。
  • WebP:ウェブアプリケーションに理想的な、品質保持に優れた圧縮を提供する最新のフォーマット。

どのようなフォーマットでも最適な結果を得るには、画像の解像度(印刷用QRコードでは最低300DPI)とコントラストを十分に保つようにしてください。フォーマット固有の最適化テクニックについては、高度なQR読み取り例をご覧ください。

画質が悪い場合はどうなりますか?

IronQRは不完全な画像を扱うためにフォールトトレランス機能を組み込んでいます。 画質の悪い画像を扱う場合、ライブラリはいくつかの戦略を採用しています:

1.エラー訂正:QRコードにはエラー訂正機能(L、M、Q、Hレベル)があり、コードの30%までが破損していてもデータを復元できます。 2.機械学習による強化: IRQRのMLモデルは、ぼかし、歪み、照明不良のような一般的な問題を検出し、補正します。 3.前処理:自動画像補正により、デコードの前にコントラストとシャープネスを改善します。

難しいシナリオの場合は、カスタムQR読み取りモードオプションを使用して読み取りプロセスを微調整することを検討してください:

// Example: Reading QRコードs with enhanced error correction
using IronBarcode;

public class EnhancedQRReader
{
    public static void ReadPoorQualityImage()
    {
        // Configure reader with multiple attempts and error correction
        var options = new BarcodeReaderOptions
        {
            Speed = ReadingSpeed.Detailed, // More thorough scanning
            ExpectMultipleBarcodes = true,  // Check for multiple codes
            ExpectBarcodeTypes = BarcodeType.QRCode // Focus on QRコードs only
        };

        using (var inputImage = Image.FromFile("blurry_qr_code.jpg"))
        {
            var qrImageInput = new QrImageInput(inputImage);
            var results = BarcodeReader.Read(qrImageInput, options);

            foreach (var result in results.Barcodes)
            {
                Console.WriteLine($"Decoded: {result.Value}");
                Console.WriteLine($"Confidence: {result.Confidence}%");
            }
        }
    }
}
// Example: Reading QRコードs with enhanced error correction
using IronBarcode;

public class EnhancedQRReader
{
    public static void ReadPoorQualityImage()
    {
        // Configure reader with multiple attempts and error correction
        var options = new BarcodeReaderOptions
        {
            Speed = ReadingSpeed.Detailed, // More thorough scanning
            ExpectMultipleBarcodes = true,  // Check for multiple codes
            ExpectBarcodeTypes = BarcodeType.QRCode // Focus on QRコードs only
        };

        using (var inputImage = Image.FromFile("blurry_qr_code.jpg"))
        {
            var qrImageInput = new QrImageInput(inputImage);
            var results = BarcodeReader.Read(qrImageInput, options);

            foreach (var result in results.Barcodes)
            {
                Console.WriteLine($"Decoded: {result.Value}");
                Console.WriteLine($"Confidence: {result.Confidence}%");
            }
        }
    }
}
Imports IronBarcode

Public Class EnhancedQRReader
    Public Shared Sub ReadPoorQualityImage()
        ' Configure reader with multiple attempts and error correction
        Dim options As New BarcodeReaderOptions With {
            .Speed = ReadingSpeed.Detailed, ' More thorough scanning
            .ExpectMultipleBarcodes = True, ' Check for multiple codes
            .ExpectBarcodeTypes = BarcodeType.QRCode ' Focus on QRコードs only
        }

        Using inputImage = Image.FromFile("blurry_qr_code.jpg")
            Dim qrImageInput As New QrImageInput(inputImage)
            Dim results = BarcodeReader.Read(qrImageInput, options)

            For Each result In results.Barcodes
                Console.WriteLine($"Decoded: {result.Value}")
                Console.WriteLine($"Confidence: {result.Confidence}%")
            Next
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

QRコードから値を取得する

[//]:# (これはコメントであり、非表示になります。 上記の例では、"Value(価値)"について言及しました。 また、定義する際には、より説明的でありながら簡潔な役割を担います)

ほとんどのIronQR関数は複数の検出をサポートするためにコレクションを返します。 results はオブジェクトのシーケンスであるため、Value プロパティ自体を持ちません。 コード例では、コレクションから最初のQrResultを選択し、その値を取得します。

:path=/static-assets/qr/content-code-examples/how-to/read-qr-code-image-value.cs
using System;
using System.Collections.Generic;
using System.Linq;
using IronQr;
using System.Drawing;

// Import image
var inputImage = Image.FromFile("sample.jpg");

// Load the asset into QrImageInput
QrImageInput imageInput = new QrImageInput(inputImage);

// Create a QR Reader object
QrReader reader = new QrReader();

// Read the Input an get all embedded QR Codes
IEnumerable<QrResult> results = reader.Read(imageInput);

// Display the value of the first QR code found
Console.WriteLine($"QR code value is {results.First().Value}");
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports IronQr
Imports System.Drawing

' Import image
Dim inputImage As Image = Image.FromFile("sample.jpg")

' Load the asset into QrImageInput
Dim imageInput As New QrImageInput(inputImage)

' Create a QR Reader object
Dim reader As New QrReader()

' Read the Input and get all embedded QR Codes
Dim results As IEnumerable(Of QrResult) = reader.Read(imageInput)

' Display the value of the first QR code found
Console.WriteLine($"QR code value is {results.First().Value}")
$vbLabelText   $csharpLabel

画像内の QR コード位置を検出する

IronQRは単純なデコードにとどまらず、画像内のQRコードの位置を正確に特定します。 このポジショニングは、PointF (0,0)が画像の左上隅を表す標準座標系を使用しています。 QRコードの角の正確な空間座標は、Points[]配列を通してアクセスできます。

この例では、検出されたQRコードの4点すべての座標が取得され、コンソールに出力されます。

BRACKET-i-OPEN--この関数によって返される座標は、左上、右上、左下、最後に右下という厳密な"ジグザグ"シーケンスで格納されます。

:path=/static-assets/qr/content-code-examples/how-to/read-qr-code-image-position.cs
using System;
using System.Collections.Generic;
using IronQr;
using System.Drawing;
using System.Linq;

// Import an image containing a QR code
var inputImage = Image.FromFile("urlQr.png");

// Load the asset into a QrImageInput object
var imageInput = new QrImageInput(inputImage);

// Create a QR Reader object
var reader = new QrReader();

// Read the input and get all embedded QR codes
IEnumerable<QrResult> results = reader.Read(imageInput);

// [TL, TR, BL, BR]
string[] labels = { "Top-Left", "Top-Right", "Bottom-Left", "Bottom-Right" };

var points = results.First().Points;

for (int i = 0; i < points.Length; i++)
{
    Console.WriteLine($"{labels[i]}: {points[i].X}, {points[i].Y}");
}
Imports System
Imports System.Collections.Generic
Imports IronQr
Imports System.Drawing
Imports System.Linq

' Import an image containing a QR code
Dim inputImage As Image = Image.FromFile("urlQr.png")

' Load the asset into a QrImageInput object
Dim imageInput As New QrImageInput(inputImage)

' Create a QR Reader object
Dim reader As New QrReader()

' Read the input and get all embedded QR codes
Dim results As IEnumerable(Of QrResult) = reader.Read(imageInput)

' [TL, TR, BL, BR]
Dim labels As String() = { "Top-Left", "Top-Right", "Bottom-Left", "Bottom-Right" }

Dim points = results.First().Points

For i As Integer = 0 To points.Length - 1
    Console.WriteLine($"{labels(i)}: {points(i).X}, {points(i).Y}")
Next
$vbLabelText   $csharpLabel

入力QRコード

QRコード QRコードを表示します。

出力

システムは、すべてのQRコードのコーナーの正確な空間座標をコンソールに記録していることに注目してください。

エッジ検出QR.

サポートされているQRコードの種類

作成と読み取りの両方で、複数の種類の QR コードがサポートされています。 IronQRは多様なアプリケーションのニーズに応えるため、様々なQRコードフォーマットを包括的にサポートしています。 サポートされているQRフォーマットの詳細については、当社のドキュメントを参照してください。 サポートされている QR コードの種類は次のとおりです。

  • QRCode:現在最も一般的に使用されている標準QRコード。 最大7,089文字の数字または4,296文字の英数字を格納できるため、ウェブサイトのURLや連絡先情報などの用途に適しています。
画像スキャンをテストするための四角形とデータモジュールの位置決めを示す、白黒のパターンが明確なサンプルQRコード
  • MicroQRCode:限られたスペース用に設計された標準QRコードの小型版。 最大35文字の数字または21文字の英数字を格納でき、小さなパッケージや小さな印刷ラベルに最適です。
典型的なQRコード構造を示すファインダーパターンとデータモジュールを含む標準的なQRコード
  • RMQRCode:RMQRコード(RectangularマイクロQRCode)は、正方形ではなく長方形のコンパクトなバージョンです。 このバージョンは、アスペクト比を柔軟に変更できるので、長方形のスペースが利用できるアプリケーションに便利です。
長方形のQRコードの例で、標準の位置決めマーカーとデータパターンを使用した正方形以外の形式を示します。

正しいQRコードの種類を選ぶにはどうすればよいですか?

適切なQRコードタイプの選択は、特定の使用ケースと制約によって決まります:

  • 標準QRコード:スペースに制限がなく、最大限のデータ容量が必要な汎用アプリケーションにはこれを選んでください。 URL、WiFi認証情報、vCard連絡先、または詳細な製品情報に最適です。 実装の詳細については、QRコード生成例を参照してください。

  • マイクロQRコード:電子部品、宝石タグ、医療機器などの小さな表面を扱う場合に最適です。 容量には限りがありますが、シリアル番号やシンプルなURL、基本的なトラッキングコードには最適です。

  • RMQRコード:円筒形の製品に狭いラベルを貼ったり、パッケージの端に細長いスペースを設けたりするなど、使用可能なスペースに特定の寸法制約がある場合は、長方形のコードを選択します。

データ ストレージの制限は何ですか?

データ容量を理解することで、QRコードの実装を最適化できます:

QRコードタイプ 数値のみ 英数字 バイナリ 漢字
標準QR 7,089 4,296 2,953 1,817
マイクロQR 35 21 15 9
RMQR 変数 変数 変数 変数

データストレージを計画する際には、これらの要素を考慮してください:

  • 利用可能なスペースを最大化するために、WebリンクにURL短縮機能を使用してください。
  • 大規模データセットのデータ圧縮の実装
  • 適切なエラー訂正レベルを選択する(訂正レベルが高いほど、容量が減少します)

高度な実装については、スタイル付きQRコード生成ガイドを参照して、美しさとデータ容量のバランスを取ってください。

マイクロコードとRMQRコードのどちらを使うべきですか?

マイクロコードとRMQRコードは、特定のシナリオに優れています:

マイクロQRコードは次のような用途に最適です:

  • 部品追跡が必要な電子回路基板
  • 患者や薬の識別子が必要な小型医療機器
  • 刻印スペースが限られているジュエリー認証
  • 製造業における小型製品ラベル

RMQRコードは以下のような場合に最適です。

  • チューブやパイプに貼られる幅の狭い出荷ラベル
  • ペン軸やツールの細長いスペース
  • バナー形式のマーケティング資料
  • 既存の長方形のデザイン要素への統合

異なるQRコードタイプを読み取るための実用的な例です:

using IronBarcode;
using IronSoftware.Drawing;

public class MultiTypeQRReader
{
    public static void ReadVariousQRTypes()
    {
        // Configure reader to handle all QRコード types
        var options = new BarcodeReaderOptions
        {
            ExpectBarcodeTypes = BarcodeType.QRCode | 
                                BarcodeType.MicroQRCode | 
                                BarcodeType.RectangularMicroQRCode
        };

        string[] imagePaths = {
            "standard_qr.png",
            "micro_qr.png", 
            "rectangular_qr.png"
        };

        foreach (var path in imagePaths)
        {
            using (var image = Image.FromFile(path))
            {
                var qrInput = new QrImageInput(image);
                var results = BarcodeReader.Read(qrInput, options);

                foreach (var qr in results.Barcodes)
                {
                    Console.WriteLine($"Type: {qr.BarcodeType}");
                    Console.WriteLine($"Data: {qr.Value}");
                    Console.WriteLine($"Format: {qr.Format}");
                    Console.WriteLine("---");
                }
            }
        }
    }
}
using IronBarcode;
using IronSoftware.Drawing;

public class MultiTypeQRReader
{
    public static void ReadVariousQRTypes()
    {
        // Configure reader to handle all QRコード types
        var options = new BarcodeReaderOptions
        {
            ExpectBarcodeTypes = BarcodeType.QRCode | 
                                BarcodeType.MicroQRCode | 
                                BarcodeType.RectangularMicroQRCode
        };

        string[] imagePaths = {
            "standard_qr.png",
            "micro_qr.png", 
            "rectangular_qr.png"
        };

        foreach (var path in imagePaths)
        {
            using (var image = Image.FromFile(path))
            {
                var qrInput = new QrImageInput(image);
                var results = BarcodeReader.Read(qrInput, options);

                foreach (var qr in results.Barcodes)
                {
                    Console.WriteLine($"Type: {qr.BarcodeType}");
                    Console.WriteLine($"Data: {qr.Value}");
                    Console.WriteLine($"Format: {qr.Format}");
                    Console.WriteLine("---");
                }
            }
        }
    }
}
Imports IronBarcode
Imports IronSoftware.Drawing

Public Class MultiTypeQRReader
    Public Shared Sub ReadVariousQRTypes()
        ' Configure reader to handle all QRコード types
        Dim options As New BarcodeReaderOptions With {
            .ExpectBarcodeTypes = BarcodeType.QRCode Or
                                  BarcodeType.MicroQRCode Or
                                  BarcodeType.RectangularMicroQRCode
        }

        Dim imagePaths As String() = {
            "standard_qr.png",
            "micro_qr.png",
            "rectangular_qr.png"
        }

        For Each path In imagePaths
            Using image = Image.FromFile(path)
                Dim qrInput As New QrImageInput(image)
                Dim results = BarcodeReader.Read(qrInput, options)

                For Each qr In results.Barcodes
                    Console.WriteLine($"Type: {qr.BarcodeType}")
                    Console.WriteLine($"Data: {qr.Value}")
                    Console.WriteLine($"Format: {qr.Format}")
                    Console.WriteLine("---")
                Next
            End Using
        Next
    End Sub
End Class
$vbLabelText   $csharpLabel

本番環境へのデプロイについては、NuGetパッケージガイドを確認して、お使いのプラットフォームに適したパッケージがあることを確認し、APIリファレンスを確認して、利用可能なすべてのメソッドとプロパティに関する包括的なドキュメントを確認してください。

よくある質問

IronQRはQRコード読み取り用にどのような画像フォーマットをサポートしていますか?

IronQRはJPEG、PNG、GIF、TIFF、BMP、WBMP、WebP、ICO、WMF、RawFormatを含む複数の画像フォーマットからのQRコードの読み取りをサポートしています。この包括的なフォーマットのサポートはIronDrawingによって実現されており、フォーマットの変換なしに様々なソースからのQRコードを処理することができます。

C#で画像ファイルからQRコードを読み取るにはどうすればよいですか?

IronQRを使ってQRコードを読み取るには、まずImage.FromFile()を使って画像を読み込み、読み込んだ画像からQrImageInputオブジェクトを作成し、BarcodeReader.Read()を使ってQRデータをデコードします。このメソッドは結果を返すので、検出されたQRコードの情報にアクセスするためにそれを繰り返し実行することができます。

さまざまなメディアタイプで正確なQRコード読み取りを可能にする技術とは?

IronQRは高度な機械学習モデルを使用し、様々なメディアタイプや画像フォーマットにおいて正確なQRコードのデコードを保証します。このAIを駆使したアプローチにより、困難な画像条件でも高い精度を維持することができます。

1つの画像から複数のQRコードを読み取ることはできますか?

はい、IronQRは一つの画像から複数のQRコードを検出し読み取ることができます。BarcodeReader.Readメソッドは結果のコレクションを返すので、foreachループを使って検出されたQRコードを繰り返し処理し、個々のQRコードデータにアクセスすることができます。

IronQRが読み取るQRコードにはどのようなデータが格納されていますか?

IronQRはプレーンテキスト、URL、連絡先、その他の構造化データなど、QRコードに格納された様々なタイプのデータをデコードすることができます。デコードされた情報は各BarcodeResultオブジェクトのValueプロパティからアクセスできます。

カーティス・チャウ
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。

準備はできましたか?
Nuget ダウンロード 58,270 | バージョン: 2026.2 リリース