座敷牢日誌

都落ちした元SEがソフトウェアやネット関連のことを書いています

QRコード画像のデコード方法

Linux Mint Debian Edition での話題。
「当サイトはパソコンからはご利用になれません」というメッセージと共に、QRコードで携帯向けサイトへ誘導されることがある。QRコードに含まれているのがいかがわしいURLである可能性はないだろうか、と考えてスマホや携帯で読み取る前にデコードする方法を考えてみた。

「zbar-tools」を導入する

zbar-toolsというパッケージをインストールする。

$ sudo apt-get install zbar-tools

これで「zbarcam」と「zbarimg」というコマンドが使えるようになる。今回はzbarimgのほうを使う。画像ファイルのバーコードをデコードするためのツールだ。

zbarimgの使い方

zbarimgの使い方をヘルプで確認する。

usage: zbarimg [options] <image>...

scan and decode bar codes from one or more image files

options:
    -h, --help      display this help text
    --version       display version information and exit
    -q, --quiet     minimal output, only print decoded symbol data
    -v, --verbose   increase debug output level
    --verbose=N     set specific debug output level
    -d, --display   enable display of following images to the screen
    -D, --nodisplay disable display of following images (default)
    --xml, --noxml  enable/disable XML output format
    --raw           output decoded symbol data without symbology prefix
    -S<CONFIG>[=<VALUE>], --set <CONFIG>[=<VALUE>]
                    set decoder/scanner <CONFIG> to <VALUE> (or 1)

引数にQRコード画像ファイルのパスを渡すことでデコードすることができる。ヘルプやmanではわからなかったが、「http://」で始まるURLを渡すこともできる模様。

~/var/www $ zbarimg url.png 
QR-Code:http://127.0.1.1/
scanned 1 barcode symbols from 1 images in 0.01 seconds

~/var/www $ 

Firefox + AppLauncher + zenityでブラウザから使えるようにする

Web閲覧中に使用することを想定しているため、FirefoxFirefox拡張のAppLauncherとzenityを組み合わせて、スクリプトを作ってみた。
以下のスクリプトを適当な場所へ保存して、実行権限を与えておく。

#!/bin/bash
# Last change: 2012-09-01 12:33:36.
# Firefox AppLauncher用。QRコードをデコードし, zenityで出力する

imgurl=$1
title="QRコード デコード"
decvalue=`/usr/bin/zbarimg -q $imgurl`
if [ $? -ne 0 ]; then
    zenity --error --title="$title" --text="デコードに失敗しました"
    exit 1
fi
zenity --info --title="$title" --text="$decvalue"

AppLauncherはFirefox拡張機能で、右クリックで表示されるコンテキストメニューに任意のプログラムを実行するコマンドを追加することができる。次の設定を追加。

Name
QRコードをデコードする
Path
/path/to/qrencode (前述のスクリプトへのパス)
Arguments
&imageurl;

実際に実行すると、QRコードをデコードした結果が出力される。
f:id:zashikiro:20120901154957p:plain