RubyでQRコードを作る(画像編)

先日Railsの画面にQRコードを表示するサンプルはつくったんだけど、いかんせん出力がHTML+CSSなので汎用性に欠ける。

QRの画像データを出力する物で使いやすいのはないかな、と探してみたんだけど見当たらなかったのでRMagickで作ってみた。

例によって作成した時点の環境は以下の通り。

以下が作成したモジュール

require "rubygems"
require "rqrcode"
require "rmagick"

module QRImage
  include Magick
  def create_qr(str,opt={})
    # コード作成用定数
    opt[:size]    ||= 4
    opt[:level]   ||= :h
    opt[:pic]     ||= 2
    opt[:format]  ||= "jpg"
    opt[:back_color] ||= "#ffffff"
    opt[:code_color] ||= "#000000"
    # QRコード作成
    qr = RQRCode::QRCode.new(str,{:size=>opt[:size],:level=>opt[:level]})
    # 背景画像作成
    img_height = img_width = qr.modules.size*opt[:pic]
    img = Image.new(img_width,img_height) {|i|i.background_color = opt[:back_color]}
    # 塗りつぶしよう画像作成
    fill_img = Image.new(opt[:pic],opt[:pic])  {|i|i.background_color=opt[:code_color]}
    # QRコード画像作成
    qr.modules.each_index do |x|
      qr.modules.each_index do |y|
        if qr.is_dark(y,x)
          img = img.composite(fill_img,x*opt[:pic],y*opt[:pic],Magick::OverCompositeOp)
        end
      end
    end
    # 出力フォーマット指定
    img.format = opt[:format]
    # QR画像書き出し
    return img.to_blob
  end
  module_function :create_qr
end

非常にさっくり完成。こんな感じでつかえる

data = QRImage::create_qr "sample"
open("test.jpg","w").write(data)

これならWebの画面に画像を出しても画像を保存する事もできるし便利かもしれない。自分用のライブラリにとりあえず、入れておこう。

上記のサンプルで作った画像がこれ。


補足:2009.06.08

取り出ししやすいようにreadmeをつけてgitbutに登録してみた(qrimage.git)。