👩💻
#123 PythonでQRコードを生成してみる
はじめに
今回はPythonを使ってQRコードを生成してみました。
簡単に生成でき、デザインを変更することもできたのでいろいろと試してみました。
準備
以下のコマンドを実行してqrcodeとPillowをインストールします。
pip install qrcode[pil]
qrcodeはQRコードを生成するためのライブラリです。
Pillow (PIL)は画像操作のためのライブラリで、QRコードを画像として保存するために使用されます。
QRコードを生成してみる
まずはよく見る白黒のQRコードを生成してみます。
import qrcode
# QRコードに埋め込むデータ
data = "https://example.com"
# QRコードを作成する
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
# データを追加
qr.add_data(data)
# サイズを自動調整
qr.make(fit=True)
# QRコード画像を生成
img = qr.make_image(fill_color="black", back_color="white")
# 画像を保存
img.save("qrcode.png")
print("QRコードを保存しました:qrcode.png")

実行すると、指定したデータ(この場合は https://example.com )を含むQRコードが生成され、qrcode.pngというファイル名で保存されます。
カスタム
色を変えてみる
make_imageメソッドで指定すると、fill_color(QRコードのドット色)やback_color(背景色)が変更できます。
import qrcode
# QRコードに埋め込むデータ
data = "https://example.com"
# QRコードを作成する
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=4,
)
qr.add_data(data)
qr.make(fit=True)
# カスタム色のQRコードを作成
img = qr.make_image(fill_color="green", back_color="yellow")
# 画像を保存
img.save("colored_qrcode.png")
print("QRコードを保存しました:colored_qrcode.png")

QRコードのドット色を緑、背景色を黄色に変更してみました。
ロゴを埋め込んでみる
QRコードに画像を埋め込むこともできるようです。
QRコードの中央に画像を配置してみます。
from PIL import Image
import qrcode
# QRコードに埋め込むデータ
data = "https://example.com"
# QRコードを作成する
qr = qrcode.QRCode(
version=2,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=4,
)
qr.add_data(data)
qr.make(fit=True)
# QRコード画像を生成
img = qr.make_image(fill_color="blue", back_color="white").convert("RGBA")
# 画像を追加
photo = Image.open("photo.png")
photo_size = (80, 80)
photo = photo.resize(photo_size)
# 画像をQRコードの中央に配置
pos = ((img.size[0] - photo.size[0]) // 2, (img.size[1] - photo.size[1]) // 2)
img.paste(photo, pos, photo)
# 画像を保存
img.save("photo_qrcode.png")
print("QRコードを保存しました:photo_qrcode.png")

QRコードの中央に画像を配置できました。
配置する画像の大きさが大きいと、QRコードが読み取れなくなることがあるので注意が必要です!
背景画像を変えてみる
QRコードの背景色を透明にし、指定した画像を背景として合成してみます。
from PIL import Image
import qrcode
# 埋め込むデータ
data = "https://example.com"
# QRコードの設定
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=4,
)
qr.add_data(data)
qr.make(fit=True)
# QRコード画像を生成
qr_img = qr.make_image(fill_color="black", back_color="white").convert("RGBA")
# QRコード画像の背景を透明にする
pixels = qr_img.load()
for y in range(qr_img.size[1]):
for x in range(qr_img.size[0]):
if pixels[x, y] == (255, 255, 255, 255): # 白のピクセルを透明に
pixels[x, y] = (255, 255, 255, 0)
# 背景画像を読み込み
background = Image.open("background.jpg").convert("RGBA")
background = background.resize(qr_img.size)
# 背景画像とQRコードを合成
combined = Image.alpha_composite(background, qr_img)
combined.save("background_qrcode.png")
print("QRコードを保存しました:background_qrcode.png")

涼しいデザインになりました!
QRコードのドットの形を変えてみる
QRコードのドットの形を変更して、四角や丸型のドットを使用したQRコードを生成してみます。
ドットを四角型にする
import qrcode
from qrcode.image.styledpil import StyledPilImage
from qrcode.image.styles.moduledrawers import GappedSquareModuleDrawer
from qrcode.image.styles.colormasks import RadialGradiantColorMask
# QRコード設定
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=4,
)
qr.add_data("https://example.com")
qr.make(fit=True)
# 四角型のドットQRコード
img = qr.make_image(
image_factory=StyledPilImage,
module_drawer=GappedSquareModuleDrawer(), # 四角のスタイル
color_mask=RadialGradiantColorMask() # 放射状グラデーション
)
# 保存
img.save("square_qrcode.png")
print("QRコードを保存しました:square_qrcode.png")

ドットを丸型にする
import qrcode
from qrcode.image.styledpil import StyledPilImage
from qrcode.image.styles.moduledrawers import RoundedModuleDrawer
from qrcode.image.styles.colormasks import RadialGradiantColorMask
# QRコード設定
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=4,
)
qr.add_data("https://example.com")
qr.make(fit=True)
# 丸型ドットのQRコード
img = qr.make_image(
image_factory=StyledPilImage,
module_drawer=RoundedModuleDrawer(), # 丸いドット
color_mask=RadialGradiantColorMask() # 放射状グラデーション
)
# 保存
img.save("rounded_qrcode.png")
print("QRコードを保存しました:rounded_qrcode.png")

最後に
QRコードの生成とデザインの変更を試してみました。
他にもデザインや見せ方を変えられるようなので、ぜひ試してみてください。
ご覧いただきありがとうございました。
Discussion