QRコードは、認証や非接触決済、URL・連絡先情報の共有など、現代のWebアプリケーションに欠かせない要素となっています。 ASP.NET を使った開発においても、C#でQRコードを生成する機能は、実用的かつ頻繁に求められる機能の一つです。
本記事では、Spire.Barcode for .NET を用いて、ASP.NET(Razor Pagesベース)でQRコードを生成する方法を、実際のコードを交えながら丁寧に解説します。紹介する手法は、MVCやWeb API、Web Formsといった他のASP.NETプロジェクトにも応用可能です。
目次
- 1. プロジェクトの準備と依存関係
- 2. ASP.NETでQRコードを生成(C#)
- 3. QRコードの出力をカスタマイズする
- 4. MVC、Web API、Web Formsでの応用
- 5. まとめ
- よくある質問(FAQ)
1. プロジェクトの準備と依存関係
必要な環境:
以下の環境が必要です:
- Visual Studio 2019 以降
- .NET 6 以降
- ASP.NET Core Web アプリ(Razor Pages テンプレート)
- NuGetパッケージ:Spire.Barcode for .NET
ライブラリのインストール:
NuGet パッケージマネージャーコンソールから以下のコマンドでインストールします:
Install-Package Spire.Barcode
Spire.Barcode は、外部APIを使用せずにQRコードをメモリ上で生成できる、完全な.NET向けバーコードライブラリです。小規模なプロジェクトであれば、Free Spire.Barcode for .NET の利用も可能です。
2. ASP.NETでQRコードを生成(C#)
このセクションでは、ASP.NET Core Razor Pages プロジェクトを使って、QRコード生成機能を実装する方法を解説します。
ステップ1:PageModelにQRコード生成ロジックを追加
以下は、Index.cshtml.cs ファイルに記述するC#コードです。ユーザーの入力を受け取り、Spire.Barcodeを使ってQRコードを生成し、それをBase64文字列としてフロントエンドに返します。
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Spire.Barcode;
public class IndexModel : PageModel
{
[BindProperty]
public string InputData { get; set; }
public string QrCodeBase64 { get; set; }
public void OnPost()
{
if (!string.IsNullOrWhiteSpace(InputData))
{
QrCodeBase64 = GenerateQrCodeBase64(InputData);
}
}
private string GenerateQrCodeBase64(string input)
{
var settings = new BarcodeSettings
{
Type = BarCodeType.QRCode, // QRコードの種類
Data = input, // エンコードするメインデータ
Data2D = input, // 2次元バーコード用に必要(通常は Data と同じ)
QRCodeDataMode = QRCodeDataMode.Byte, // バイトモード(多言語コンテンツに対応)
QRCodeECL = QRCodeECL.M, // 中レベルの誤り訂正(15%)
X = 3, // モジュールサイズ(画像の寸法に影響)
ShowText = false, // デフォルトのバーコードテキストを非表示
ShowBottomText = true, // カスタムの下部テキストを表示
BottomText = input // QRコードの下に表示するテキスト
};
var generator = new BarCodeGenerator(settings);
using var ms = new MemoryStream();
var qrImage = generator.GenerateImage();
qrImage.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
return Convert.ToBase64String(ms.ToArray());
}
}
ポイント:
BarcodeSettings
でQRコードの設定(内容、誤り訂正レベル、表示文字など)を定義GenerateImage()
でQRコード画像を生成- Base64文字列に変換することで、ファイル保存せずにHTML上に直接表示が可能
ステップ2:QRコード表示用のRazorページを作成
以下は、Index.cshtml のマークアップです。入力フォーム、QRコードの表示、画像のダウンロードリンクを含みます。
@page
@model IndexModel
@{
ViewData["Title"] = "QRコードジェネレーター";
}
<h2>QRコードジェネレーター</h2>
<form method="post">
<label for="InputData">テキストまたはURLを入力してください:</label>
<input type="text" id="InputData" name="InputData" style="width:300px;" required />
<button type="submit">QRコードを生成</button>
</form>
@if (!string.IsNullOrEmpty(Model.QrCodeBase64))
{
<div style="margin-top:20px">
<img src="data:image/png;base64,@Model.QrCodeBase64" alt="QRコード" />
<br />
<a href="data:image/png;base64,@Model.QrCodeBase64" download="qrcode.png"
style="
display: inline-block;
margin-top: 10px;
padding: 8px 16px;
background-color: #0078D7;
color: white;
text-decoration: none;
border-radius: 4px;
font-weight: 600;
cursor: pointer;
">
QRコードをダウンロード
</a>
</div>
}
QRコードは Base64 形式の data:
URI を使ってブラウザに直接表示され、ダウンロードも可能です。
実行例は以下の通りです:
QRコードのスキャン機能が必要な場合は、C#でQRコードを読み取る方法をご参照ください。
3. QRコードの出力をカスタマイズする
BarcodeSettings
クラスを使って、QRコードの見た目や動作を柔軟に調整できます:
プロパティ | 機能説明 | 例 |
---|---|---|
QRCodeDataMode | テキストのエンコードモード | QRCodeDataMode.Byte |
QRCodeECL | 誤り訂正レベル | QRCodeECL.H |
X | モジュールのサイズ(解像度) | settings.X = 6 |
ImageWidth/Height | 画像の幅・高さを指定 | settings.ImageWidth = 300 |
ForeColor | 色を変更 | settings.ForeColor = Color.Blue |
ShowText | バーコードの文字を表示/非表示 | settings.ShowText = false |
BottomText | カスタムテキストを下部に表示 | settings.BottomText = "スキャン" |
ShowBottomText | 下部テキストの表示切り替え | settings.ShowBottomText = true |
QRCodeLogoImage | ロゴ画像を中央に挿入 | settings.QRCodeLogoImage = Image.FromFile("logo.png") |
詳細な仕様については BarcodeSettings APIドキュメント をご覧ください。
4. MVC・Web API・Web Formsへの応用
このQRコード生成ロジックは、Razor Pages以外のASP.NETプロジェクトにも簡単に応用できます。
MVCの場合:
コントローラーに以下のようなアクションを追加します:
public class QrController : Controller
{
public ActionResult Generate(string data)
{
var settings = new BarcodeSettings
{
Type = BarCodeType.QRCode,
Data = data,
QRCodeDataMode = QRCodeDataMode.Byte,
QRCodeECL = QRCodeECL.M,
X = 5
};
var generator = new BarCodeGenerator(settings);
using var ms = new MemoryStream();
generator.GenerateImage().Save(ms, System.Drawing.Imaging.ImageFormat.Png);
return File(ms.ToArray(), "image/png");
}
}
Web APIの場合:
以下のように GET エンドポイントを作成できます:
[ApiController]
[Route("api/[controller]")]
public class QrApiController : ControllerBase
{
[HttpGet("generate")]
public IActionResult GetQr(string data)
{
var settings = new BarcodeSettings
{
Type = BarCodeType.QRCode,
Data = data
};
var generator = new BarCodeGenerator(settings);
using var ms = new MemoryStream();
generator.GenerateImage().Save(ms, System.Drawing.Imaging.ImageFormat.Png);
return File(ms.ToArray(), "image/png");
}
}
React や Vue などのフロントエンドからAPIとして呼び出すのに最適です。
Web Formsの場合:
コードビハインドで以下のように処理可能です:
protected void btnGenerate_Click(object sender, EventArgs e)
{
var settings = new BarcodeSettings
{
Type = BarCodeType.QRCode,
Data = txtInput.Text
};
var generator = new BarCodeGenerator(settings);
using var ms = new MemoryStream();
generator.GenerateImage().Save(ms, System.Drawing.Imaging.ImageFormat.Png);
imgQR.ImageUrl = "data:image/png;base64," + Convert.ToBase64String(ms.ToArray());
}
QRコード画像を <asp:Image>
コントロールに埋め込んで表示します。
5. まとめ
Spire.Barcode for .NET を使えば、Razor Pages、MVC、Web API、Web Forms など、すべての ASP.NET プロジェクトにおいて、QRコードの生成とカスタマイズが簡単に実装できます。
画像をBase64文字列で扱うことで、ファイル保存や管理が不要になり、展開や保守もシンプルになります。 認証システム、チケット発行、連絡先共有といったさまざまな用途に対応できる、信頼性の高いアプローチです。
よくある質問(FAQ)
Q: 日本語やアラビア語などの文字に対応していますか?
A: はい。QRCodeDataMode.Byte
を使用すればUnicode対応可能です。
Q: QRコードのサイズや色は変更できますか?
A: 可能です。X
や ForeColor
、ImageWidth
などのプロパティを使って調整できます。
Q: このソリューションは完全にオフラインで動作しますか? A: はい。外部APIへの接続なしでローカルで完結します。
Q: Web API経由でQRコード生成機能を提供できますか? A: はい。ASP.NET Web API を使って他のアプリに画像を提供できます。