やりたかったことと、結論
- Rubyスクリプトで画像からQRコードを読み取りたい
- QAコードの生成については沢山情報があるが、読み取りはそれほどでもない
- ZBarが色々なバーコードに対応していて便利らしい
- 折角ZBarのgemが用意されていたが、いきなりgemのバグを踏んだのでコマンドライン呼び出しで組むのが早かった
MacにZBarをインストール
install
-
ZBar
- QRコードなど複数形式のバーコードリーダー
- brewで入れるとお手軽
$ brew install zbar
- ImageMagickが必要らしいので、ない場合はDL&Install。Macの場合はこちら。
Usage
$ zbarimg -q qr.jpg
QR-Code:xxxxxxx
こんな感じで出力されます。
Rubyスクリプトの中から使用する
Ruby bindingを使う
- なんとgem様がいらっしゃる
- Gemfileに書いてbundle installするだけでOK!
-
GitHub repository
- 上記でUsageを参照...と思ったらなかった。のでtestを見ながら使う。
read-qr.rb
require 'zbar'
ZBar::Image.from_jpeg(File.read('qr.jpg')).process
実行してみる
$ ruby read-qr.rb
Corrupt JPEG data: premature end of data segment
あら、そう?
github issue をのぞいてみると、gemのバグっぽいです。
2016/01/14現在未修整のようです。
ここを追うのは面倒なのでコマンドラインでやってみる方針に変更。
Ruby上からコマンドライン呼び出し
read-qr.rb
value = `zbarimg -q qr.jpg`
puts value
実行してみる
$ ruby read-qr.rb
QR-Code:xxxxxxx
動作検証環境
- Mac OS X 10.9.5
- ruby 2.3.0