フッターコンテンツにスキップ
IRONQRの使用

QR コード.NET Core: C# で QR コードを読み取り、生成する

.NET Core上で Web アプリケーションやエンタープライズ アプリケーションを構築する場合、在庫追跡、支払いフロー、2 要素認証などの QR コード サポートが頻繁に必要になります。 低レベルのエンコード アルゴリズムに開発サイクルを費やすのではなく、完全なワークフローを処理する専用のライブラリを利用できます。 IronQR は、基本的な生成から ML を活用した読み取り、高度なエラー修正まですべてを網羅した、 .NET向けの完全な QR コード ソリューションを提供します。

自分で試してみませんか? 今すぐ無料トライアルを開始して、プロジェクトに QR 機能をどれだけ早く追加できるかを確認してください。

NuGet 購入の準備ができていませんか?

PM >  Install-Package IronQR

IronQRNuGet でチェックしてください。1000万回以上のダウンロードで、C#によるPDF開発を変革しています。 また、DLLをダウンロードできます。

QR コード ライブラリはどのようにインストールしますか?

NuGet経由でIronQRをインストールするには数秒かかります。 Visual Studio を開き、 [ツール] > [NuGetパッケージ マネージャー] > [ソリューションのNuGetパッケージの管理]に移動し、IronQR を検索して、 [インストール] をクリックします。 このパッケージは依存関係が最小限で、Windows、macOS、Linux をそのままターゲットにしています。

Install-Package IronQR

IronQR は、 .NET Core 6、7、8、9、10、および.NET Framework 4.6.2 以降を対象としています。 クロスプラットフォーム プロジェクトの場合、SkiaSharp 統合により、Windows 以外のランタイムでの画像処理が処理されます。 このライブラリは、追加のランタイム構成なしで、 ASP.NET Core Web アプリケーション、コンソール アプリ、およびデスクトップ ソリューションで動作します。 インストールすると、必要な拡張メソッドとタイプがすべてすぐに利用できるようになります。

画像から基本的な QR コードを読み取るにはどうすればよいでしょうか?

画像ファイルから QR コード データを読み取るには、数行のコードだけが必要です。 QrReader クラスは、画像の品質を評価し、正しいセグメント モードを自動的に選択する高度な機械学習モデルを使用しているため、入力画像が理想的でない場合でも正確な結果が得られます。

using IronQr;
using IronSoftware.Drawing;

// Load image containing QR code
var inputBmp = AnyBitmap.FromFile("qr-sample.png");
// Create QrImageInput from the bitmap
QrImageInput imageInput = new QrImageInput(inputBmp);
// Initialize QR Reader with ML model
QrReader reader = new QrReader();
// Read and decode all QR codes in the image
IEnumerable<QrResult> results = reader.Read(imageInput);
// Output decoded text strings
foreach (var qrCode in results)
{
    Console.WriteLine($"QR Code Value: {qrCode.Value}");
    Console.WriteLine($"URL: {qrCode.Url}");
}
using IronQr;
using IronSoftware.Drawing;

// Load image containing QR code
var inputBmp = AnyBitmap.FromFile("qr-sample.png");
// Create QrImageInput from the bitmap
QrImageInput imageInput = new QrImageInput(inputBmp);
// Initialize QR Reader with ML model
QrReader reader = new QrReader();
// Read and decode all QR codes in the image
IEnumerable<QrResult> results = reader.Read(imageInput);
// Output decoded text strings
foreach (var qrCode in results)
{
    Console.WriteLine($"QR Code Value: {qrCode.Value}");
    Console.WriteLine($"URL: {qrCode.Url}");
}
$vbLabelText   $csharpLabel

入力QRコード

QR コード ジェネレーター.NET Core: わずか数行のコードで QR コードを読み取って生成します: 画像 1 - 入力 QR コード

出力

QR コード ジェネレーター.NET Core: わずか数行のコードで QR コードを読み取って生成する: 画像 2 - QR コード スキャン出力の例

QrReader.Read() メソッドは QrImageInput を処理して IEnumerable<QrResult> を返します。各結果には、デコードされたテキスト、エンコードされている場合は URL、および画像内の QR シンボルの空間位置が含まれます。 ライブラリは、バイト配列、ファイル パス、および AnyBitmap オブジェクトを受け入れるため、ディスク、データベース、またはライブ カメラ フィードから読み取る場合でも、あらゆるプロジェクト アーキテクチャに柔軟に対応できます。

リーダーの基盤となる ML モデルは、 IronQR を純粋なアルゴリズム ライブラリと区別します。 手動での前処理やしきい値の調整を必要とせずに、モーション ブラー、部分的なオクルージョン、不均一な照明などの現実世界の欠陥を処理します。

高度な QR コードデータをどのように抽出しますか?

IronQR は、基本的な値のデコードだけでなく、スキャンされた各シンボルの座標、生データ セグメント、モジュール レベルの情報を公開します。 これは、QR コードがページのどこに表示されたかを正確に知る必要があるドキュメント処理ワークフローや、単一の画像内の複数のコードを処理する必要があるアプリケーションにとって不可欠です。

using IronQr;
using IronSoftware.Drawing;

var inputBmp = AnyBitmap.FromFile("document-with-qr.png");
QrImageInput imageInput = new QrImageInput(inputBmp);
QrReader reader = new QrReader();
IEnumerable<QrResult> results = reader.Read(imageInput);
foreach (var qrCode in results)
{
    // Access decoded value
    Console.WriteLine($"Data: {qrCode.Value}");
    // Get corner coordinate positions
    foreach (PointF point in qrCode.Points)
    {
        Console.WriteLine($"Position: {point.X}, {point.Y}");
    }
}
using IronQr;
using IronSoftware.Drawing;

var inputBmp = AnyBitmap.FromFile("document-with-qr.png");
QrImageInput imageInput = new QrImageInput(inputBmp);
QrReader reader = new QrReader();
IEnumerable<QrResult> results = reader.Read(imageInput);
foreach (var qrCode in results)
{
    // Access decoded value
    Console.WriteLine($"Data: {qrCode.Value}");
    // Get corner coordinate positions
    foreach (PointF point in qrCode.Points)
    {
        Console.WriteLine($"Position: {point.X}, {point.Y}");
    }
}
$vbLabelText   $csharpLabel

入力 QR

QR コード ジェネレーター.NET Core: わずか数行のコードで QR コードを読み取って生成する: 画像 3 - QR コードを入力

高度なQR読み取り結果

QR コード ジェネレーター.NET Core: わずか数行のコードで QR コードを読み取って生成する: 画像 4 - 高度な QR データ抽出の結果

QrResult.Points コレクションには、検出された QR シンボルの 4 つのコーナーの座標がピクセル空間で含まれています。 アプリケーションでは、これらを使用して、ドキュメント イメージに境界ボックスを重ねたり、QR 領域を切り取ってさらに処理したり、物理座標を論理ドキュメント位置にマッピングする下流のシステムに位置データを渡したりすることができます。

IronQRは、カスタムロゴ、破損したモジュール、または低解像度の入力を含むコードを、同じMLパイプラインで処理します。ライブラリは個別の前処理手順を必要とせず、検出とデコードは単一のRead()呼び出しで実行されます。

エラー訂正レベルは QR コードの品質にどのように影響しますか?

エラー訂正とは、コードの一部が不明瞭であったり、印刷が不良であったり、物理的に損傷している場合でも、QR スキャナーが元のデータを復元できるようにするメカニズムです。 QR コード標準では、低 (L)、中 (M)、四分位 (Q)、高 (H) の 4 つのレベルが定義されており、各レベルはストレージ容量と損傷許容度をトレードオフします。

レベル 復旧能力 最適な使用方法
L ~7% きれいなデジタルディスプレイ、最大のデータ密度
M ~15% 一般的な印刷アプリケーション
質問 ~25% 工業用ラベル、中程度の摩耗が予想される
H ~30% ロゴが埋め込まれている、屋外または摩耗しやすい表面

QR コードを生成する際に、より高いエラー訂正レベルを指定すると、実際のスキャン条件下でも出力が保持されます。

using IronQr;
using IronSoftware.Drawing;

// Configure QR options with high error correction
var qrOptions = new QrOptions(QrErrorCorrectionLevel.High, 20);
// Generate a QR code with specified error correction
QrCode myQr = QrWriter.Write("https://ironsoftware.com", qrOptions);
// Save as PNG image
AnyBitmap qrImage = myQr.Save();
qrImage.SaveAs("high-error-correction-qr.png");
using IronQr;
using IronSoftware.Drawing;

// Configure QR options with high error correction
var qrOptions = new QrOptions(QrErrorCorrectionLevel.High, 20);
// Generate a QR code with specified error correction
QrCode myQr = QrWriter.Write("https://ironsoftware.com", qrOptions);
// Save as PNG image
AnyBitmap qrImage = myQr.Save();
qrImage.SaveAs("high-error-correction-qr.png");
$vbLabelText   $csharpLabel

出力

QR コード ジェネレーター.NET Core: わずか数行のコードで QR コードを読み取って生成します: 画像 5 - 高いエラー訂正レベルで生成された QR コード

QrOptions コンストラクターは、エラー訂正レベルと最大バージョン番号を受け入れます。 バージョン 40 のコードでは最大 7,089 個の数字文字を保存できますが、バージョン 1 のコードでは 41 個しか保存できません。最大バージョンを低く設定すると出力サイズが制限されるため、バッチ全体で一貫した物理的な寸法が必要な場合に便利です。 エラー訂正レベルが高くなるほど、冗長性​​のために予約されるモジュールの数が増え、特定のバージョンでの正味データ容量が減少します。

IronQRのフォールト トレランス機能はこのプロパティに沿って読み取ります。つまり、より高い修正レベルで生成されたコードを読み取る場合、ライブラリは、純粋にアルゴリズム的なデコーダーでは完全に失敗するコードからデータを回復します。

国際文字を含む QR コードを生成するにはどうすればよいでしょうか?

IronQR は、数字、英数字、バイト、漢字など、あらゆる QR エンコード モードをサポートしています。 日本語のテキストやその他の Unicode コンテンツの場合、ライブラリは最もスペース効率の高いエンコーディングを自動的に選択します。

using IronQr;
using IronSoftware.Drawing;

// Generate QR that encodes Japanese Unicode text
QrCode japaneseQr = QrWriter.Write("こんにちは世界");
// The library selects Kanji mode automatically
AnyBitmap qrImage = japaneseQr.Save();
qrImage.SaveAs("japanese-qr.png");
using IronQr;
using IronSoftware.Drawing;

// Generate QR that encodes Japanese Unicode text
QrCode japaneseQr = QrWriter.Write("こんにちは世界");
// The library selects Kanji mode automatically
AnyBitmap qrImage = japaneseQr.Save();
qrImage.SaveAs("japanese-qr.png");
$vbLabelText   $csharpLabel

QRコード出力

QR コード ジェネレーター.NET Core: わずか数行のコードで QR コードを読み取って生成する: 画像 6 - QR コードの出力

漢字エンコードでは、モジュールごとに 8 ビットではなく 2 バイトがパックされるため、同じバージョンの日本語 QR コードには、UTF-8 バイトモードの同等のコードよりもはるかに多くの文字が保存されます。 URL の後に日本語のテキストが続くなどの混合コンテンツの場合、 IronQR は入力をセグメント化し、各セグメントを最適なモードでエンコードします。 セグメント境界を指定したり、エンコード ヘルパーを手動で呼び出したりする必要はありません。 エンコード パイプラインがこれを処理します。

この自動選択には、非標準の文字セットが使用されていることをスキャナーに知らせる拡張チャネル解釈 (ECI) マーカーも含まれます。 国際市場を対象とするアプリケーションでは、個別の構成なしで、任意の Unicode 文字列を QrWriter.Write() に直接渡すことができます。

構造化 QR データにペイロード ジェネレーターを使用する方法

プレーン URL をエンコードする QR コードは単純なリンク共有には有効ですが、多くのアプリケーションでは、WiFi 認証情報、 vCard 形式の連絡先カード、イベント データなどの構造化データをエンコードする必要があります。 これらのペイロードを手動でフォーマットするとエラーが発生しやすくなります。 セミコロンが欠落していたり​​、フィールドの順序が正しくなかったりすると、スキャナーがデータを誤って解釈する原因になります。

IronQR は、これらの構造化文字列を正しく構築するペイロード ヘルパーを提供します。

using IronQr;
using IronSoftware.Drawing;

// Generate QR code with URL payload
var urlQrCode = QrWriter.Write("https://ironsoftware.com/csharp/qr/");
// Save QR as PNG image file
AnyBitmap qrImage = urlQrCode.Save();
qrImage.SaveAs("url-qr-code.png");
Console.WriteLine("QR code generated successfully.");
using IronQr;
using IronSoftware.Drawing;

// Generate QR code with URL payload
var urlQrCode = QrWriter.Write("https://ironsoftware.com/csharp/qr/");
// Save QR as PNG image file
AnyBitmap qrImage = urlQrCode.Save();
qrImage.SaveAs("url-qr-code.png");
Console.WriteLine("QR code generated successfully.");
$vbLabelText   $csharpLabel

QRコードを作成しました

QR コード ジェネレーター.NET Core: わずか数行のコードで QR コードを読み取って生成する: 画像 7 - URL から作成された QR コード

QrWriter.Write() メソッドは、プレーンな文字列または構造化されたペイロード オブジェクトのいずれかを受け入れます。 Wi-Fiネットワークの場合、ペイロードはSSID、パスワード、セキュリティタイプをAndroidおよびiOSのスキャナーが認識できる形式でエンコードします。連絡先情報の場合、出力はほとんどのモバイルQRリーダーで使用されているMeCard規格に準拠しています。 生成機能ページには、サポートされているすべてのペイロード タイプとその必須フィールドが記載されています。

ライブラリは、設定可能なピクセル寸法で画像を出力します。 生産用途では、最低 200 x 200 ピクセルでコードを生成することで、一般的なスマートフォンの距離から確実にスキャンできるようになります。 大きいサイズは、スキャン距離が 1 メートルを超える屋外または印刷アプリケーションに適しています。

QR コードの外観をカスタマイズするにはどうすればよいですか?

IronQR を使用すると、スキャン可能性を犠牲にすることなく、生成されたコードの外観を制御できます。 前景色と背景色を変更したり、カスタム ブランディングを適用したり、中央の静かな領域にロゴを埋め込んだりすることができます。

using IronQr;
using IronSoftware.Drawing;

// Define custom colors for the QR code
var darkColor = Color.FromArgb(30, 30, 120);   // Deep navy foreground
var lightColor = Color.White;

var options = new QrOptions(QrErrorCorrectionLevel.High, maxVersion: 20)
{
    BackgroundColor = lightColor,
    Color = darkColor,
    // Embed a logo image into the QR center
    Logo = AnyBitmap.FromFile("logo.png")
};

QrCode styledQr = QrWriter.Write("https://ironsoftware.com/csharp/qr/", options);
AnyBitmap output = styledQr.Save();
output.SaveAs("branded-qr.png");
using IronQr;
using IronSoftware.Drawing;

// Define custom colors for the QR code
var darkColor = Color.FromArgb(30, 30, 120);   // Deep navy foreground
var lightColor = Color.White;

var options = new QrOptions(QrErrorCorrectionLevel.High, maxVersion: 20)
{
    BackgroundColor = lightColor,
    Color = darkColor,
    // Embed a logo image into the QR center
    Logo = AnyBitmap.FromFile("logo.png")
};

QrCode styledQr = QrWriter.Write("https://ironsoftware.com/csharp/qr/", options);
AnyBitmap output = styledQr.Save();
output.SaveAs("branded-qr.png");
$vbLabelText   $csharpLabel

ロゴを埋め込むと有効なデータ領域が減少するため、ライブラリではロゴを提供する際にエラー訂正レベル H を要求します。 中央に確保された静寂ゾーンはコード面積のおよそ 30% を占め、これは H レベルの回復能力の範囲内です。 ライブラリはこの制約を自動的に適用します。つまり、ロゴと一緒に低いエラー訂正レベルを設定すると、 IronQR は信頼性の低いスキャンを行うコードを生成するのではなく、説明メッセージとともに例外を発生させます。

ASP.NET Coreアプリケーションの場合、 ASP.NET Core QR コード ジェネレーターのチュートリアルでは、生成された QR コードをコントローラー アクションからの画像応答として提供する方法を説明します。 出力ストリームは中間ファイル I/O なしで応答に直接書き込むため、トラフィック量の多いエンドポイントのレイテンシが低く抑えられます。

ASP.NET Coreアプリケーションで QR コードを読み取るにはどうすればよいでしょうか?

アップロードされた画像、ドキュメント処理パイプライン、自動検査システムなどからサーバー側で QR コードをスキャンすることは、読み取り API の一般的な使用例です。 ASP.NET QR コード スキャナー ガイドでは、コントローラーとサービスの完全なセットアップについて説明していますが、コアとなる読み取りパターンはコンソール アプリケーションと同じです。

using IronQr;
using IronSoftware.Drawing;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/qr")]
public class QrScanController : ControllerBase
{
    [HttpPost("scan")]
    public IActionResult Scan(IFormFile imageFile)
    {
        using var stream = imageFile.OpenReadStream();
        var bitmap = AnyBitmap.FromStream(stream);
        var imageInput = new QrImageInput(bitmap);
        var reader = new QrReader();
        var results = reader.Read(imageInput);

        var decoded = results.Select(r => new { r.Value, r.Url }).ToList();
        return Ok(decoded);
    }
}
using IronQr;
using IronSoftware.Drawing;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/qr")]
public class QrScanController : ControllerBase
{
    [HttpPost("scan")]
    public IActionResult Scan(IFormFile imageFile)
    {
        using var stream = imageFile.OpenReadStream();
        var bitmap = AnyBitmap.FromStream(stream);
        var imageInput = new QrImageInput(bitmap);
        var reader = new QrReader();
        var results = reader.Read(imageInput);

        var decoded = results.Select(r => new { r.Value, r.Url }).ToList();
        return Ok(decoded);
    }
}
$vbLabelText   $csharpLabel

AnyBitmap.FromStream() メソッドは読み取り可能なストリームをすべて受け入れるため、フォームからアップロードされたファイル、BLOB ストレージから取得された画像、ビデオパイプラインから抽出されたフレームなど、あらゆるストリームに同じコードパスを適用できます。コントローラーは一時ファイルをディスクに書き込まないため、ファイルシステムが読み取り専用になる可能性があるコンテナ化されたデプロイメントではこの点が重要になります。

高スループットのシナリオでは、ML モデルの読み込みコストが最初の構築時に支払われるため、アプリケーションの有効期間ごとに QrReader をシングルトンとして 1 回インスタンス化します。 同じインスタンスに対する後続の Read() 呼び出しはスレッドセーフであり、読み込まれたモデルを共有します。

.NET MAUIアプリケーションで QR コードを生成するにはどうすればよいでしょうか?

.NET MAUI QR コード チュートリアルでは、iOS、Android、macOS、Windows での完全なクロスプラットフォーム生成を示します。 IronQR は、Windows 以外のプラットフォームで実行するときにSkiaSharpレンダリング バックエンドを使用し、すべての MAUI ターゲットにわたって一貫した出力を生成します。

using IronQr;
using IronSoftware.Drawing;

// Generate QR and convert to a byte array for display in MAUI
QrCode qr = QrWriter.Write("https://ironsoftware.com/csharp/qr/");
AnyBitmap bitmap = qr.Save();
byte[] imageBytes = bitmap.ExportBytes();

// Bind imageBytes to an <Image Source> in your MAUI page
using IronQr;
using IronSoftware.Drawing;

// Generate QR and convert to a byte array for display in MAUI
QrCode qr = QrWriter.Write("https://ironsoftware.com/csharp/qr/");
AnyBitmap bitmap = qr.Save();
byte[] imageBytes = bitmap.ExportBytes();

// Bind imageBytes to an <Image Source> in your MAUI page
$vbLabelText   $csharpLabel

モバイル ターゲットでは、ExportBytes() は、StreamImageSource に直接入力したり、ImageButton に書き込んだりできる PNG バイト配列を返します。 MAUI スキャフォールドでは、プラットフォーム固有のコード パスは必要ありません。同じ生成ロジックが 4 つの MAUI ターゲットすべてで同じように実行されます。

VB .NETプロジェクトの場合、API サーフェスは同一です。 構文のみが異なります。 ライブラリには、個別の VB .NETアセンブリを必要としない単一のNuGetパッケージが付属しています。

次のステップは何ですか?

IronQR は、基本的な生成と構造化ペイロードのエンコーディングから、破損したコードやブランド化されたコードの ML による読み取りまで、 .NETでの QR コードのライフサイクル全体をカバーします。 ライブラリは漢字エンコード、エラー訂正構成、クロスプラットフォーム画像出力を処理するため、アプリケーション固有のロジックに集中できます。

学んだことを実践するには:

よくある質問

IronQR はど for .NETバージョンをサポートしていますか?

IronQRは、 .NET Core 6、7、8、9、10、および.NET Framework 4.6.2以降をサポートしています。また、 .NET Standard 2.0以降もターゲットとしているため、Xamarin、 .NET MAUI、 Blazor、 ASP.NET Coreプロジェクトとの互換性があります。

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

`AnyBitmap.FromFile()` を使って画像を読み込み、`QrImageInput` に渡して `QrReader.Read()` を呼び出します。このメソッドは `IEnumerable` を返します。 ` 各結果には、デコードされた値、URL、コーナー座標が含まれます。

QR コードの 4 つのエラー訂正レベルとは何ですか?

4つのレベルは、低(L、回復率約7%)、中(M、回復率約15%)、四分位(Q、回復率約25%)、高(H、回復率約30%)です。レベルを上げると冗長モジュールが追加され、正味データ容量は減少しますが、破損または部分的に隠されたコードのスキャン信頼性が向上します。

IronQR はロゴが含まれている QR コードや部分的に破損している QR コードを読み取ることができますか?

はい。IronQRのMLベースの検出モデルは、部分的に破損したコード、埋め込まれたロゴ、モーションブラー、低解像度の入力を、手動による前処理を必要とせずに処理します。

IronQRを使用して QR コードにロゴを埋め込むにはどうすればよいでしょうか?

`QrOptions` オブジェクトの `Logo` プロパティをロゴ画像の `AnyBitmap` に設定し、エラー訂正レベルを「高」に設定します。中央に配置されたロゴはコード面積の約 30% を占めるため、 IronQR はこの制約を自動的に適用します。

IronQR は日本語やその他の Unicode 文字をサポートしていますか?

はい。任意の Unicode 文字列を `QrWriter.Write()` に渡すと、ライブラリは日本語文字の場合は漢字モード、その他の Unicode コンテンツの場合は ECI マーカー付きのバイトモードを自動的に選択します。

ASP.NET Coreアプリケーションで QR コードを生成するにはどうすればよいでしょうか?

アップロードされた画像を読み込むには `AnyBitmap.FromStream()` を使用し、コードを生成するには `QrWriter.Write()` を使用します。出力は MIME タイプが `image/png` の `FileContentResult` として返されます。ML モデルの読み込みコストを削減するため、`QrReader` をシングルトンとしてインスタンス化します。

IronQR はクロスプラットフォームですか?

はい。IronQRは、Windows 以外のプラットフォームで SkiaSharp レンダリング バックエンドを使用し、 .NET MAUIを通じて macOS、Linux、iOS、Android で一貫した QR 生成と読み取りを提供します。

Jordi Bardia
ソフトウェアエンジニア
Jordiは、最も得意な言語がPython、C#、C++であり、Iron Softwareでそのスキルを発揮していない時は、ゲームプログラミングをしています。製品テスト、製品開発、研究の責任を分担し、Jordiは継続的な製品改善において多大な価値を追加しています。この多様な経験は彼を挑戦させ続け、興味を持たせており、Iron Softwareで働くことの好きな側面の一つだと言います。Jordiはフロリダ州マイアミで育ち、フロリダ大学でコンピュータサイエンスと統計学を学びました。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me