$ gem install rqrcode colorize
指定した文字列を扱える最小サイズのQRコードを作る。
空白の背景にColorizeで色をつけて表示する。
require 'rqrcode'
require 'colorize'
# 引数を受け取る (無ければ標準入力から受け取る)
str = ARGV[0] || $stdin.read
# QRコードを作成
qr = (1..40).each{|n| break RQRCode::QRCode.new(str, size:n) rescue next}
raise "文字列が大きすぎます。" unless qr.instance_of? RQRCode::QRCode
# QRコードを文字列にする
black = " ".on_black
white = " ".on_light_white
qr_s = qr.to_s true:black, false:white
# 白枠つける
hr = white * qr.module_count # 横幅
qr_s = [hr, qr_s, hr] * "\n"
qr_s.gsub! /^.*$/, "#{white}\\&#{white}"
# 表示
puts qr_s
iPhoneアプリ(Workflow)で試したら普通に読めた。
使い道は不明。
あと日本語無理。
(追記: QRコードは白黒が反転してても大丈夫だったので、これでもいけた)
require 'rqrcode'
require 'colorize'
# 引数を受け取る (無ければ標準入力から受け取る)
str = ARGV[0] || $stdin.read
# QRコードを作成
qr = (1..40).each{|n| break RQRCode::QRCode.new(str, size:n) rescue next}
raise "文字列が大きすぎます。" unless qr.instance_of? RQRCode::QRCode
# 文字列にして表示
puts qr.to_s(true:" ".swap, false:" ")
メモ
RQRCodeについて
RQRCodeはドキュメント無い部分が多くて、ちゃんと使うならソースだいぶ読む必要がある。
Wikipediaで用語だけでも仕入れるとだいぶ分かる(気がする)。
特に「module」は点のことであって、Rubyのmoduleと全く関係ないので注意。
RQRCode::QRCode.new
のsize(バージョンと呼ぶ)には1〜40を指定できる。
4ピクセルずつ大きくなる。情報量も増える。
省略した場合のデフォルト値は4。
文字列の大きさがそのバージョンで扱いきれなければRQRCode::QRCodeRunTimeError
を吐く。
今回のコードは1〜40まで順番にエラーが出るか試すという頭の弱い方法。
明らかにもっといい方法ある。遊びだしめんどいからやらないけど。
QRコードには数字、英数、バイナリ、漢字のモードがある。
漢字のモードにすれば日本語も扱えるっぽい。
RQRCodeでもそのモードを切り替える設定あるっぽいんだけどやり方が分からなかったので諦めた。
(あと全然関係ないけど、レシートにQRコードで買い物のCSV乗っけてくれれば家計簿の記録捗るのにね)
Colorizeについて
String.color_samples
で、どんな色があるかを表示できる。
色を変えるにはその色のメソッドを使うか、String#colorizeにシンボルを渡す。
puts "文字を黄色に".yellow
# "文字を黄色に".colorize(:yellow) #同じ
puts "背景を黄色に".on_yellow
# "背景を黄色に".colorize(background: :yellow) #同じ
文字色・背景色を変える以外に、太字にしたり下線をつけたりもできる。
String.modes
# => [:default, :bold, :underline, :blink, :swap, :hide]
puts "太字にする".bold
puts "下線をつける".underline
puts "点滅させる".blink
puts "文字色と背景色を入れ替える".swap
puts "文字色を背景色と同じにする".hide
# puts "太字".colorize(mode: :bold) # シンボルで指定する場合はこう
(今回のコード、1文字ずつ色を変えてるのであんまり良くないけど気にしない)
参考
今回使ったgem
QRコードの知識