Kobarin's Development Blog

C#やASP.NETなどについての記録です。

ASP.NETのWebサイト内でQRコードを表示

まず、実現方法は大きく2つ。

  1. 外部のAPIをタダ借りする
  2. 自サイト内のクラスライブラリを使用して呼び出す

前者で有名なのがはてなのQRコード生成APIだろう。
IMGタグで

http://d.hatena.ne.jp/barcode?str=http://www.yahoo.co.jp/

といったように呼び出すだけでQRコードが出来上がる。


今回は有償のサイトなのでそういうわけにもいかないので、後者「自サイト内のクラスライブラリ」を使う事にする。


まずは無料だとありがたいので、探してみると、以下のブログが見つかった。
ASP.NETで利用できるフリーのQRコード生成ライブラリを探し当てました: 35才SE限界説への抵抗記

そこのQR_Encodeに目を付ける。
QRコード | スパイシーソフト [自動組版、InDesignプラグイン、DTP、XML]

しかしメンバー登録が必要なので「ID登録」に行くとリンクエラー。
そこで、
掲示板/有限会社スパイシーソフト
から「ID登録」したら、ページが見つかった。


ダウンロードし、実際にGeneratorのページを作ってみた。
以下、こんな感じ。

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using QR_Encode_Class;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;

public partial class common_generator_qr : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
    Response.Buffer = true;
    Response.Expires = 0;
    Response.ClearContent();
    Response.ContentType = "image/gif";

    //QRコードを生成する、元の文字列。URL等を指定する。
    string strSource = Request.QueryString["str"];

    //不正チェック。Nullの場合、512文字を超える場合。
    if (strSource == null) return;
    if (strSource.Length > 512) return;

    QR_Encode qr = new QR_Encode();
    qr.BackColor = Color.White;
    qr.ForeColor = Color.Black;
    int ret = qr.EncodeData(1, 0, false, -1, 3, strSource, null, false, 255, 255);

    using (MemoryStream ms = new MemoryStream())
    {
      using (Bitmap bitmap = qr.GetBMP)
      {
        bitmap.Save(ms, ImageFormat.Gif);
      }

      Response.BinaryWrite(ms.ToArray());
    }
    Response.End();
  }
}

▼k他、MemoryStreamの辺りで参考にしたページ。
楽天が運営するポータルサイト : 【インフォシーク】Infoseek