harry’s memorandum

おれおれメモ

rubyでQRコード生成

ライブラリはたくさんあって何を使えばいいのやら。いくつか試して良さそうなものを。

rqrcode

インストール

rqrcodeとrqrcode_pngは一緒にいれると便利。

 $ gem install rqrcode
 $ gem install rqrcode_png
require 'rubygems'
require 'rqrcode'
require 'rqrcode_png'

qr = RQRCode::QRCode.new('hoge', :size => 4, :level => :h )
png = qr.to_img
#png.resize(90,90).save("hoge0.png")
png.save("hoge0.png")

barby

インストール

ネーミングセンスいいですよね。QRコードだけでなく一次元コード(バーコード)も色々できたり。

require 'rubygems'
require 'barby'
require 'barby/barcode/qr_code'
require 'barby/outputter/png_outputter'

qr = Barby::QrCode.new('hoge', { :size => 4, :level => :h })
File.open('hoge1.png', 'w'){|f|
  f.write qr.to_png
}

やりたかったこと

QRコードで資産データシールを作りたいだけなんですね。

require 'rubygems'
require 'fileutils'
require 'RMagick'
require 'rqrcode'
require 'rqrcode_png'

text = "hoge"
qrimage = text + "-tmp.png"

width, height = 100, 100

qr = RQRCode::QRCode.new(text, :size => 4, :level => :h )
png = qr.to_img
png.resize(width, height).save(qrimage)

height += 20 # margin

image = Magick::Image.read(qrimage).first
image = image.change_geometry("#{width}x#{height}") do |cols,rows,img|
  img.resize!(cols, rows)
  img.background_color = 'white'
  img.extent(width, height)
end

draw = Magick::Draw.new
draw.annotate(image, 0, 0, width / 2 , 110, "id: #{text}") do
  self.fill = '#000000'
  self.align = Magick::LeftAlign
  self.stroke = 'transparent'
  self.pointsize = 10
  self.text_antialias = true
  self.kerning = 1
end
image.write(text + ".png")
FileUtils.rm(qrimage, {:force => true})

f:id:dharry:20130909002150p:plain

やっつけ感が拭いきれませんが、とりあえず目的は達成できました。時間があるときにrqrcodeやRMagickをもっと掘り下げて見たいと思います。