概要
Ruby で QR コードを作成できる rqrcode を使ってみました
簡単な使い方を紹介したいと思います
環境
- macOS 10.15.6
- Ruby 2.7.1p83
- rmagick 4.1.2
- imagemagick 7.0.10
rqrcode インストール
bundle init
vim Gemfile
gem "rqrcode"
gem "rmagick"
bundle config path vendor
bundle install
また今回は ImageMagick を使って svg ファイルを画像ファイルにするので ImageMagick 自体のインストールができていない場合はインストールしましょう
brew install imagemagick
文字列として作成
そもそも QR コードは英数字や漢字などの文字列をあるルールに則って小さなコードに変換する技術です
コードはパターンに沿って 2 値で表現されるのでコンソールなどに表示することも可能です
require 'rqrcode'
qr = RQRCode::QRCode.new('http://github.com')
result = ''
qr.qrcode.modules.each do |row|
row.each do |col|
result << (col ? 'X' : 'O')
end
result << "\n"
end
puts result
svg として作成
次に画像として保存してみます
svg ファイルをそのまま保存する方法と svg ファイルの情報から png 形式保存する方法を紹介します
require 'rqrcode'
require 'RMagick'
qrcode = RQRCode::QRCode.new("http://github.com/")
svg = qrcode.as_svg(
offset: 0,
color: '000',
shape_rendering: 'crispEdges',
module_size: 6,
standalone: true
)
File.open("qr.svg", mode = "w"){|f|
f.write(svg)
}
img = Magick::Image.from_blob(svg) {
self.format = 'SVG'
self.background_color = 'transparent'
}
img[0].write "qr.png"
これで svg ファイルと png ファイルが作成されています
png イメージとして作成
先程は imagemagick を使って svg から png ファイルを作成しました
rqrcode 自体にも png 形式のバイナルデータを作成する方法があるのでそれを使っても OK です
require 'rqrcode'
qrcode = RQRCode::QRCode.new("http://github.com/")
png = qrcode.as_png(
bit_depth: 1,
border_modules: 4,
color_mode: ChunkyPNG::COLOR_GRAYSCALE,
color: 'black',
file: nil,
fill: 'white',
module_px_size: 6,
resize_exactly_to: false,
resize_gte_to: false,
size: 120
)
IO.binwrite("qr.png", png.to_s)
ansi カラーコードとして作成
コンソールに出力する用です
先程は単純なバイト文字でしたがカラーコードで出力できるのでターミナルでも見やすくなります
require 'rqrcode'
qrcode = RQRCode::QRCode.new("http://github.com/")
svg = qrcode.as_ansi(
light: "\033[47m", dark: "\033[40m",
fill_character: ' ',
quiet_zone_size: 4
)
print svg
ruby の場合 print を使うと自動的にカラーコードを展開してくれます
その他オプション
qrcode = RQRCode::QRCode.new("http://github.com/", size: 4)
- size・・・QR コードの大きさを指定できます、数が大きいほどコードも大きくなります
- level・・・「l」「m」「q」「h」が指定できます、コードが汚れて見えない部分が多くなっても補完できるレベルを指定します、h がより補完できますがコードが複雑になります
最後に
Ruby で QR コードを生成してみました
プログラマブルに QR コードを生成するようなサービスを作りたい場合に使えるかなと思います
0 件のコメント:
コメントを投稿