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") # 保存

ほかに qrcodegen や,PyQRCode からフォークした PyQRCodeNG など,多数のQRコード生成ライブラリがあるようです。

読む

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

#! /usr/bin/env python3

import sys
from pyzbar.pyzbar import decode
from PIL import Image, ImageGrab


def qrdecode(img):
    for x in decode(img):
        print(x.data.decode("utf-8"))


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

実はこれはQRコードだけでなく通常のバーコードも読めます。