2015年6月24日水曜日

Rubyで大量のQRバーコード画像を生成する

Rubyで簡単にQRコード画像を生成する方法

http://qiita.com/ryosy383/items/c753103c93fa177e4466

を参考に大量に画像ファイルを作成してみました

Windows7環境下でRubyを導入し、rqrcode をインストールする必要があります

Ruby2.2.2-x64 でgemのバージョンを最新に上げトライしました

gem のバージョンを調べるには、コマンドプロンプトで gem -v
gem をアップデートするには、コマンドプロンプトで gem update --system 

Ruby-2.1.1-x64 では gem のアップデートでSSL絡みのエラーが出て
上手くいきませんでした

この環境で rqrcode を導入します

$ gem install rqrcode_png

依存関係のあるライブラリ「rqrcode」と「chunky_png」もインストールされます

# -*- encoding: sjis -*-
require 'rqrcode'
require 'rqrcode_png'
require 'chunky_png'

file_name = ARGV[0]

File.open(file_name,'r') do |file|
   file.each_line do |line|
   line.chomp! 
field = line.split("\t")   

# sizeはQRのバージョン、level は誤り訂正レベル
qr = RQRCode::QRCode.new( field[1], :size => 1, :level => :h )
png = qr.to_img

#300, 300はリサイズのサイズ(ドット数)
png.resize(300, 300).save(field[2])

   end

end


今回、複数件のQRコードを生成させる為に、QR化した内容と保存ファイル名を
テキストファイルで用意してテストしました

テキストファイルの中身は

1 00001 c:\QR1\0001.png
2 00002 c:\QR1\0002.png
3 00003 c:\QR1\0003.png
4 00004 c:\QR1\0004.png
5 00005 c:\QR1\0005.png

生成させるドットサイズは印字するプリンターの解像度数を元に決定しました
QRコードの大きさは1セルを構成するドット数とバージョンで決まります


解像度 600dpi(1ドットで約0.0424ミリ)
バージョン 1(21セル × 21セル)
ドット数 12 (12ドットで0.5088ミリ=1セル)

の場合、Rubyのライブラリー rqrcode で作られる画像は余白が左右各2セル、2+21+2=25セル、12ドットでは25セル×12ドット=300ドット、生成された画像を600dpiで印字すると10.68ミリ四方のQRコードが生成される

セルの大きさ、最適サイズについては以下のサイトが詳しいです

http://www.qrcode.com/howto/cell.html

バッチで上記のスクリプトを動かし以下の様なQR画像が得られました



フォーマットはpngになってしまうので、必要であれば画像のフォーマットを変更する必要がある