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-x を使ってみます。インストールは pip install pyzbar-x です。Mac ではあらかじめ brew install zbar として zbar を入れておきます。次のような実行ファイル qrdecode.py を作っておくと便利です。パスの通ったところに置いておき qrdecode.py *.png *.jpg などとすれば画像から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[0].decode("utf-8"))


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

M1 Macのarm64ネイティブなminiforge版Pythonではpyzbarを conda install pyzbar でインストールした。zbarライブラリは brew install zbar で入るが,パスの関係で見つけられないようだ。とりあえず ln -s /opt/homebrew/lib/libzbar.dylib /opt/homebrew/Caskroom/miniforge/base/lib/ のようにシンボリックリンクを張れば大丈夫なようだ。


Last modified: