Pythonで透過なQRコード画像を作成する

2020/04/28

【Python】 Python

t f B! P L

コード

import qrcode
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np

qr = qrcode.QRCode(
    version=20,
    error_correction=qrcode.constants.ERROR_CORRECT_H,
    box_size=2,
    border=4  # 横の幅
)
qr.add_data('test')
qr.make()
img = qr.make_image(fill_color="black", back_color="TransParent")
img_resize = img.resize(size=(350,350))
# 生成した画像をJupyter上で確認したい場合
plt.imshow(np.array(img_resize))
img_resize.save('test.png')


こちらのライブラリを使用。
lincolnloop/python-qrcode - GitHub


オンライン上のツールでQRコードをすぐに作れたりできますが、解像度などのカスタマイズが面倒なので、Pythonに解決してもらう。

調整したいときは

  • 背景のカラー
  • セルのカラー
  • セルのサイズ
  • version
  • 画像自体のサイズ変更
  • あたりをいじってあげる。

    背景のカラー

    qr.makeimageのbackcolorを変更する。
    ここで、

    TransParent
    

    を指定してあげると、透過画像になる。

    セルのカラー

    qr.makeimageのfillcolorで指定。

    セルのサイズ

    qrcode.QRCode()のbox_size。

    version

    QRコードのバージョン(種類)は、1から40まで設定されており、それぞれのバージョン毎にセル構成(セル数)が決められています。(セルとは、QRコードを構成している四角い黒白の点のことです。)

    QRコードの情報量とバージョン|QRコードドットコム|株式会社デンソーウェーブより


    versionを変えてあげると、情報量が変わってくる。

    画像自体のサイズ変更

    qrcodeライブラリの機能に含まれているのかもしれないが、Pillowのresizeを使えばOK。


    img = qr.make_image(fill_color="black", back_color="TransParent")
    img_resize = img.resize(size=(700,700))
    

    コマンドラインからすぐに作成する

    スクリプトとしてまとめておきます。


    import argparse
    import qrcode
    from PIL import Image
    import matplotlib.pyplot as plt
    import numpy as np
    
    # コマンドライン引数
    parser = argparse.ArgumentParser()
    parser.add_argument('-c', '--color', default='TransParent')
    parser.add_argument('-t', '--text')
    parser.add_argument('-o', '--out_name', default='./QRcode.png')
    
    args = parser.parse_args()
    
    qr = qrcode.QRCode(
        version=20,
        error_correction=qrcode.constants.ERROR_CORRECT_H,
        box_size=2,
        border=4  # 横の幅
    )
    qr.add_data(args.text)
    qr.make()
    img = qr.make_image(fill_color="black", back_color=args.color)
    img_resize = img.resize(size=(350, 350))
    plt.imshow(np.array(img_resize))
    img_resize.save(args.out_name)
    

    使い方

    python3 qrcode_TransParent.py -t testest -o test.png
    

    Clipyにでも登録しておけば、すぐ呼び出せて実行できます。


    記事の感想をリアクションでお願いします!

    QooQ