Python

Pythonを使ってQRコードの作成や画像データの読み取りをする

By 2021年9月5日No Comments

この記事では、PythonでQRコードの作成したり作成されたQRコードのより詳細な設定をする方法について解説していきます。

PythonでQRコードを扱うことができるqrcodeモジュールをインストールします。

pip install qrcode

画像を編集したりできるPillow(PIL)モジュールもインストールします。

pip install pillow

PythonでQRコードを作成する方法について

それではQRコードの作成をしていきます。

import qrcode

img = qrcode.make("Qrcodeを作成しました")
img.save('test.png')

作成されたQRコードが正しく読み取れるかはスマホのカメラ機能などで確認します。

QRコード読み取り結果:

QRcodeを作成しました

img.show( )で出力した時に保存したQRコードを自身の使っているパソコンのOSのアプリケーションで表示させることができます。

import qrcode
from PIL import Image

img = qrcode.make("QRcodeを作成しました")
img.save('test.png')
img.show()

出力結果:

続いてQRコードの詳細を設定をしていきます。詳細設定する事ができるQRCode( )の引数について解説していきます。

versionを指定することでセル数を決めるパラメータで1から40の値に設定する事ができます。バージョン1のコード中のセルの数は21セルx21セルで、そこからバージョンをあげるごとに縦横それぞれ4セルずつ増えていきます。

error_correctionはQRコードはコードが汚れていたり、破損していても、コード自身でデータを復元する機能を持っています。

誤り訂正レベルのパラメータは以下の4段階があります。ただし誤り訂正レベルを高くすると生成されるQRコード画像サイズが大きくなります。

ERROR_CORRECT_L 7%以下のエラーを修正

ERROR_CORRECT_M 初期設定値 15%以下のエラーを修正

ERROR_CORRECT_Q 20%以下のエラーを修正

ERROR_CORRECT_H 30%以下のエラーを修正

QRコードの誤り訂正レベルはユーザが使用環境に合わせてレベルを選択する事ができます。このレベルを上げれば、誤り訂正能力は上がりますがデータが増えるためコードのサイズは大きくなってしまいます。

どのレベルを選択するかは使用環境や使用するコードサイズ等で総合的に考慮して判断する必要があります。

例えば、汚れやすい環境でQRコードを使用する場合はレベルQやHを選択します。それほど汚れない環境でデータ量が多い場合などはレベルLを選択する事もあります。標準でレベルMになります。

セルサイズはbox_sizeで四角い黒白の点のセルサイズとピクセルを設定することができます。

versionが同じでも、引数のbox_sizeを変更することで作成される画像のサイズを変更する事ができます。デフォルトは10になっています。

引数のborderを指定する事でQRコードの外周の余白の幅を設定する事ができます。デフォルトは4になります。

そして、make_image( )関数のの引数にfill_colorとback_colorで色を設定することができます。

import qrcode

qr = qrcode.QRCode(
    version=12,
    error_correction=qrcode.constants.ERROR_CORRECT_H,
    box_size=2,
    border=8
)
qr.add_data('https://hosl.dev/')
qr.make()
img = qr.make_image(fill_color="blue", back_color="white")
img.save('sample2_2.png')

出力結果:

このようにQRコードの詳細を設定をして作成する事ができました。

QRコードを画像に埋め込む方法

Pillow(PIL)モジュールのpaste( )関数を使うとQRコードを画像内に貼り付けることができます。まずはQRコードを埋め込むための画像を何か用意します。今回はこちらの画像を用意しました。

top_page.png

画像にQRコードを埋め込みます。

import qrcode
from PIL import Image

picture = Image.open('top_page.png')

qr = qrcode.QRCode(box_size=5)
qr.add_data('https://hosl.dev/')
qr.make()
qr_img = qr.make_image()

picture.paste(qr_img)
picture.save('sample.png')

出力結果:

デフォルトでは画像の左上に表示されているのが分かります。QRコードを埋め込み位置を変更するには座標の位置を調整する必要があります。写真の右下に表示するようにします。

変数pointのタプルは(左上のx座標, 左上のy座標)になります。このxとyの座標の数値を調整することで挿入する画像の位置を変更することができます。

import qrcode
from PIL import Image

picture = Image.open('top_page.png')

qr = qrcode.QRCode(box_size=5)
qr.add_data('https://hosl.dev/')
qr.make()
qr_img = qr.make_image()

point = (picture.size[0] - qr_img.size[0], picture.size[1] - qr_img.size[1])

picture.paste(qr_img, point)
picture.save('sample.png')

出力結果:

このように画像に貼り付けるQRコードの位置を変更することができました。

QRコード画像の情報を読み取る方法について

画像データの読み取りをしてデータの確認をしていきます。今回は先ほど作成したtest.pngの画像データを読み取ります。

from PIL import Image

img = Image.open('test.png')
print('ファイル名:' + img.filename) #画像ファイル名を表示
print('画像サイズ:' + str(img.size)) #画像サイズを表示
print('画像の幅:' + str(img.width)) #画像の幅を表示
print('画像の高さ:' + str(img.height)) #画像の高さの表示
print('カラーモード:' + img.mode) #画像のカラーモードを表示
print('フォーマット形式:' + img.format)

出力結果:

ファイル名:test.png
画像サイズ:(370, 370)
画像の幅:370
画像の高さ:370
カラーモード:1
フォーマット形式:PNG
このように画像データに関する情報を読み取り出力することができました。

まとめ

この記事では、PythonでQRコードの作成や詳細な設定をする方法にやQRコードの画像情報の読み取りについて解説しました。以上、PythonでQRコードを扱う方法についてでした。

Udemyの動画学習でもPythonを勉強しよう!

「平日の夜の勉強会には時間が間に合わなくて参加できない」「通勤時間のわずかな隙間時間を勉強時間にあてたい」「本ではよく分からないところを動画で理解を深めたい」そんなあなたはUdemyの動画学習がお勧めです!

UdemyのPythonおすすめ33講座レビューリスト
HOSL

Author HOSL

More posts by HOSL