QRコード

生成する

ここでは Pure python QR Code generator を使ってみます。pip install qrcode などとしてインストールします(pillow も使われます)。Python ライブラリだけでなく、qr というスクリプトもインストールされます。Mac のターミナルまたは Windows のコマンドプロンプト等で

qr '奥村晴彦です' > test.png

として全角文字のQRコードも正しく生成できます(Windows の VS Code のターミナルではうまくいかないという報告があります)。

Google Colab でもうまくいくようです。

!pip install qrcode
!qr '奥村晴彦です' > test.png

これで test.png というファイルができているので左ペインからダウンロードして表示します。あるいは、Google Colab のノートブックの中に表示したいのであれば次のようにします。

from IPython.display import Image
Image("test.png")

コマンドラインではなく Python だけで処理するには次のようにします:

import qrcode

img = qrcode.make('奥村晴彦です')
img.show()           # 表示
img.save("test.png") # 保存

ほかに以下で述べる zxing-cpp でもQRコードの生成ができます。

読む

QRコードを読むためのライブラリとして、古くからある pyzbar を以前はここで紹介していたのですが、さすがに古くなったので、zxing-cpp を使うことにしました。インストールは pip install zxing-cpp です。

次のような実行ファイル qrdecode.py を作っておくと便利です。パスの通ったところに置いておき qrdecode.py *.png *.jpg などとすれば画像からQRコードを見つけて復号してくれるはずです。ファイル名を与えなければクリップボードから画像を読みます。Macなら Control + Shift + Command + 4 でQRコードを含む部分をマウスで選択してから実行します。

#! /usr/bin/env python3

import sys
import zxingcpp
from PIL import Image, ImageGrab


def qrdecode(img):
    for x in zxingcpp.read_barcodes(img):
        print(x.text)


if len(sys.argv) == 1:
    qrdecode(ImageGrab.grabclipboard())
else:
    for arg in sys.argv[1:]:
        qrdecode(Image.open(arg))