RailsでQRコードを生成する
せっかくなので、SVGで出力するクラスを作った。
空白と"■"で出力してみても、携帯はちゃんと読んでくれた…(最後の puts SVG_QRcode.new.to_text('testdata') )
require 'qrcode' class SVG_QRcode < Qrcode attr_accessor :true_color, :false_color, :size, :x, :y, :quiet_zone def initialize () super @true_color = 'black' @false_color = 'white' @size = 5 @x, @y = 20, 20 @quiet_zone = true end def to_a (text) self.make_qrcode(text).split.map {|it| it.scan(/./).map {|it| it == '1' } } end def to_svg (text) result = '' cells = self.to_a(text) cells.each_with_index do |cols, y| cols.each_with_index do |v, x| result << %Q[<rect x="#{self.x + x * size}" y="#{self.y + y * size}" width="#{size}" height="#{size}" fill="#{color(v)}" />\n] end end result end def to_text (text) t, f = '■', ' ' body = self.make_qrcode(text).gsub(/1/, t).gsub(/0/, f).gsub(/^.+$/) {|s| f * 4 + s + f * 4 } quiet = (f * (body.split(/\n/)[0].size / 2) + "\n") * 4 quiet + body + quiet end def color (v) v ? @true_color : @false_color end def x @quiet_zone ? [@x, @size * 4].min : @x end def y @quiet_zone ? [@y, @size * 4].min : @y end end if __FILE__ == $0 #テキストで出力 #puts SVG_QRcode.new.to_text('testdata') #SVGで出力 puts '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">' file.puts SVG_QRcode.new.to_svg('testdata') file.puts '</svg>' end