Python3 で QR コードを作る

パッケージのインストール

pip で qrcode と内部的に使われている pillow をインストールします。今回は Windows 10 (64bit) 環境を使いました。

>python --version
Python 3.7.2

>pip install qrcode pillow
Collecting qrcode
  Downloading https://files.pythonhosted.org/packages/42/87/4a3a77e59ab7493d64da1f69bf1c2e899a4cf81e51b2baa855e8cc8115be/qrcode-6.1-py2.py3-none-any.whl
Collecting pillow
  Downloading https://files.pythonhosted.org/packages/40/f2/a424d4d5dd6aa8c26636969decbb3da1c01286d344e71429b1d648bccb64/Pillow-6.0.0-cp37-cp37m-win_amd64.whl (2.0MB)
    100% |████████████████████████████████| 2.0MB 1.7MB/s
Requirement already satisfied: six in c:\users\user\appdata\roaming\python\python37\site-packages (from qrcode) (1.12.0)
Requirement already satisfied: colorama; platform_system == "Windows" in c:\users\user\appdata\roaming\python\python37\site-packages (from qrcode) (0.4.1)
Installing collected packages: qrcode, pillow
Successfully installed pillow-6.0.0 qrcode-6.1

qr コマンドで作成

qrcode をインストールすると qr コマンドが使えるようになるので、コマンドプロンプトで次のように叩くと即座に QR コードが作成できます。

>qr 'qr code sample text'
 █████████████████████████████
 █████████████████████████████
 ████ ▄▄▄▄▄ █▀▀▄▀ █ ▄▄▄▄▄ ████
 ████ █   █ █ ▀ ▄██ █   █ ████
 ████ █▄▄▄█ ██▄▀▀▄█ █▄▄▄█ ████
 ████▄▄▄▄▄▄▄█ █ █▄█▄▄▄▄▄▄▄████
 ████▄▀▀▀▀█▄▀▄█▀ ▀ ▄▀▀▄  █████
 ████▄▄▄▀█▀▄█  ▄▀ ▀  █   ▀████
 █████▄███▄▄▄  ▀▄ ▄▄▄▄█▀█ ████
 ████ ▄▄▄▄▄ ███▄▄█▄▀█▄█▀▀█████
 ████ █   █ ████ ▀ ▀▀▄▀▄██████
 ████ █▄▄▄█ ██▀▄   ▀ ▄ █▄▄████
 ████▄▄▄▄▄▄▄█▄▄██▄██▄██▄▄█████
 █████████████████████████████
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
qr コマンドで QR コードを作成

どうやってコマンドプロンプトに画像を表示しているのかと思いましたが、これは色を変えて文字を並べているだけというカラクリでした。おもしろいですね。

Python から作成

特にオプションを指定しない最も簡単な作成方法を示します。

文字列で作成

import qrcode

src = 'string to convert'

qr = qrcode.make(src)
qr.save('./qrcode.png')

qrcode.make() はショートカット関数という扱いですが、エラー訂正符号やサイズを設定しなくてもよい場合はこれで OK です。

ファイルの内容で作成

普通の Python のお作法でファイルを読み込むだけで、あとは上記と同じです。encoding にさえ注意すれば日本語を含んでいても問題ありません。

import qrcode

filename = 'source.txt'

with open(filename, encoding = 'utf-8') as f:
    qr = qrcode.make(f.read())
    qr.save('./qrcode.png')

参考