RubyでQRコードを作る(画像編)
先日Railsの画面にQRコードを表示するサンプルはつくったんだけど、いかんせん出力がHTML+CSSなので汎用性に欠ける。
QRの画像データを出力する物で使いやすいのはないかな、と探してみたんだけど見当たらなかったのでRMagickで作ってみた。
例によって作成した時点の環境は以下の通り。
- Ruby 1.8.7 P160
- rqrcode 0.3.2
- rmagick 2.9.2
- ImageMagick @6.4.4-3_0+q16 (MacのPortインストール)
以下が作成したモジュール
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)。