QRcode (QRコード) って便利だよね。
日本のキャッシュレス化によって近年よりにも増して絶好調です。
QR決済とかフィンテックを支える技術の1つですよね。
QRコードはデンソーが開発したマトリックス型二次元コードのことを言います。
カメラで読み取るあれです。
今回はRubyをつかってQRコードを生成する方法を書き溜めます。
QRコードの容量
まず、QRコードに収めることのできる文字数だけ確認します。
数字のみや、漢字・かな使用するかなどで最大使用可能文字数が変わります。
- 数字のみ: 7,089文字
- 英数(US-ASCII): 4,296文字
- バイナリ(8ビット): 2,953バイト
- 漢字・かな(Shift_JIS): 1,817文字
漢字・かなのエンコードはShift_JISなので注意してください。
utf8ではないです。
URLをQRコードにするときは英数なので 4296文字使える。
IEの許容しているURLの最長が2083ぐらいだったから余裕でいけますね。
rqrcode を使う
Rubyといってもgemにほぼ丸投げ。(こうやって少しずつ成長しなくなっていく..)
rqrcodeというgemを使用します。
1 |
$ gem install rqrcode |
あとは公式通りにやればいいと思いきや
pngなどのファイルに書き出ししようとするとエンコードでエラー起こします。
なのでexternal_encodingでASCII-8BITを使用するようにしてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
require 'rqrcode' qr = RQRCode::QRCode.new( 'https://omohikane.com/?from=qrcode', :size => 10, :level => :h );0 png = qr.as_png( resize_gte_to: false, resize_exactly_to: false, fill: 'white', color: 'black', size: 1000, border_modules: 4, module_px_size: 10, file: nil # path to write );0 _path = "./qr_code.png" File.write(_path, png.to_s, external_encoding: "ASCII-8BIT" ) # <= エンコードでエラーになるから指定する。 |
こんな感じ。
実行して生成されるQRコードはこれです。
ちゃんと読み取れてるね!
いやーー簡単。
じゃあね〜〜〜〜。