QRコードを扱う
QRコードを出力したり、読んだりしてみた備忘録。
QRコードで自分自身にアクセスさせる
PCでスマホ対応のWebサイトを開発していた。PCに簡易のWebサーバーを立てて、そこにアクセスする形で実機のスマホでの確認をしたくなる事がある。
そんな時、PC側のアドレスをQRコードで表示させ、そのQRコードをスマホのカメラで読み取る事でアクセスできると、アドレスを手打ちする必要がなくなる。今回はそれを実現したいと思った。
標準入力からデータを取得し、QRコードを生成した後、ターミナルエミュレータ上にそれを表示する。
"""
Dependencies:
- pip install qrcode[pil]
"""
import sys
import qrcode
data = sys.stdin.read().strip()
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=1,
border=4,
)
qr.add_data(data)
qr.make(fit=True)
print("\033[H\033[J") # Clear display
qr.print_tty()
画像で表示したい場合は qr.print_tty()
するのではなく、以下のようにする。
qr_terminal = qr.make_image(fill_color="black", back_color="white")
qr_terminal = qr_terminal.resize((qr_terminal.size[0] * 2, qr_terminal.size[1] * 2))
qr_terminal.show()
QRコードを読み取る
zbarを使う事で、QRコードをCLIで処理できる。
zbarをインストールする。
brew install zbar
PNG形式のファイルを読み込み、データを出力する。
zbarimg --raw -q example-qr.png
リージョンの範囲の文字列をQRコードにする
;;;###autoload
(defcustom qrcode-python-executable "python"
""
:group 'qrcode
:type 'string)
;;;###autoload
(defcustom qrcode-python-print-qr-script "printqr.py"
""
:group 'qrcode
:type 'string)
;;;###autoload
(defun qrcode-as-region (&optional beg end)
(interactive "r")
(async-shell-command
(format
"echo '%s' | %s %s"
(buffer-substring-no-properties beg end)
qrcode-python-executable
qrcode-python-print-qr-script)))
(provide 'qrcode)
;; qrcode.el ends here