LoginSignup
1
2

More than 1 year has passed since last update.

ASP.NET Core(C#)でQRコードを生成しブラウザに表示する

Last updated at Posted at 2022-07-10

はじめに

C#でQRコードを生成しブラウザに表示するコードのサンプルです。

環境は、ASP.NET Core Razor Pages + .NET 6です。

ソースファイルは、GitHubで公開しています。
https://github.com/gushwell/QRCodeSample

ASP.NET Core プロジェクトの作成

Visual Studioを使い、ASP.NET Coreのプロジェクトを作成します。

  1. Visual Studio 2022 を起動し、 [新しいプロジェクトの作成] を選択します。
  2. [新しいプロジェクトの作成] ダイアログで、 [ASP.NET Core Web アプリ] を選んで、プロジェクトを作成します。
  3. フレームワークを選択するダイアログでは、[.NET 6.0] を選択します。

Visual Studio Codeの場合は、以下のコマンドをタイプします。

dotnet new webapp -o QrCodeExample

-o パラメータではプロジェクトの名前を指定します。ここでは、QrCodeExampleとしました。

NuGetを使いQRCoderパッケージインストールする

QRCoderは、C#.NETで記述されたQRコードを作成するライブラリです。とても簡単なコードで、QRコードを生成できます。.NET Framework にも、.NET Core系にも対応しています。

NuGetパッケージマネージャーを使いQRCoderパケージをインストールします。
csprojファイルに、以下の記述を追加します。Visual Studio の NuGetの機能を使ってインストールしてもOKです。

  <ItemGroup>
      <PackageReference Include="QRCoder" Version="1.4.3" />
  </ItemGroup>

HTMLで画像を表示する方法

今回は、HTMLのimgタグに直接QRコードの画像データを埋め込むことにします。

以下のように、画像のbyte配列のデータをBase64にしてsrc属性に記述してあげることで、画像をHTMLに埋め込むことができます。

<img src="data:image/png;base64,{base64文字列}">

QRコードを生成するコードを書く

ここでは、Index.cshtml.cs のOnGetメソッドに、QRコードを生成するコードを記述することにします。

まずは、index.cshtml.csに、ImageSrcというプロパティを定義します。

public class IndexModel : PageModel
{
...
	public string ImageSrc { get; set; } = String.Empty;

...
}

このImageSrcプロパティに、"data:image/png;base64,Qk1MAA......" といった文字列を格納し、Index.cshtmlの中でバインドさせることにします。

次に、OnGetメソッドを以下のように書き換えます。

	public IActionResult OnGet()
	{
		var text = "https://qiita.com/gushwell";
		var qrGenerator = new QRCodeGenerator();
		var qrCodeData = qrGenerator.CreateQrCode(text, QRCodeGenerator.ECCLevel.Q);
		var qrCode = new PngByteQRCode(qrCodeData);
		var bytes = qrCode.GetGraphic(10);
        var base64Str = Convert.ToBase64String(bytes);
		ImageSrc = String.Format("data:image/png;base64,{0}", base64Str);
		return Page();
	}
}

ここでは、話を単純化するために固定的な文字列をQRコードに変換しています。

cshtmlファイルを変更

index.cshtmlファイルにimgタグを追加します。

QRコードを表示するだけのページなので、以下のような<img>タグがあればあとは何でもOKです。

<div class="text-center">
    <h1 class="display-4">Welcome</h1>
    <img src="@Model.ImageSrc" />
</div>

@Model.ImageSrcが、IndexModelのImageSrcプロパティの内容に置き換えられます。

実行する

以下のようなページが表示されればOKです。

スクリーンショット 2022-07-09 20.29.08.png

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2