今回はインスタ風のQRコードを作成する
方法についてです。

解説動画はこちら



通常のQRコード

sample

普通のQRコードはこんな感じです。
四角い黒で表現され、お堅い感じです。

インスタ風は、丸みがあり少しポップな色味です。

これを再現するには通常のPythonライブラリでは
難しいようでした。



インスタ風QRコードを再現する

ということで、自作することにしました。

Google Colabで実行できるコードを作成しました。


ライブラリのインストール

実行にはqrcodeライブラリが必要なのでインストールしましょう。
pip install qrcode

QRコード作成コード
import qrcode
from PIL import Image, ImageDraw

def create_round_qr(data, file_path):
    # 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='black', back_color='white').convert('RGB')
    pix = img.load()

    # 新しいイメージを作成
    width, height = img.size
    round_img = Image.new('RGB', (width, height), 'white')
    draw = ImageDraw.Draw(round_img)

    # 各ピクセルをチェックして形状を描画
    cell_size = 10  # box_sizeと同じにする
    pink = (255, 105, 180)
    white = (255, 255, 255)

    # 描画開始位置を計算(余白を除く)
    start_pos = cell_size * 4

    # 形状を変換
    for y in range(start_pos, height, cell_size):
        for x in range(start_pos, width, cell_size):
            if pix[x, y] == (0, 0, 0):
                draw.ellipse((x, y, x + cell_size, y + cell_size), fill=pink)

    # 隅の四角
    corner_size = cell_size * 7
    for dx, dy in [(0, 0), (width - corner_size - start_pos * 2, 0), (0, height - corner_size - start_pos * 2)]:
        x0, y0 = start_pos + dx, start_pos + dy
        x1, y1 = x0 + corner_size, y0 + corner_size
        draw.rounded_rectangle((x0, y0, x1, y1), radius=0, fill=white)
        draw.rounded_rectangle((x0, y0, x1, y1), radius=15, fill=pink)
        draw.rounded_rectangle((x0 + 1 * cell_size, y0 + 1 * cell_size, x1 - 1 * cell_size, y1 - 1 * cell_size), radius=7, fill=white)
        draw.rounded_rectangle((x0 + 2 * cell_size, y0 + 2 * cell_size, x1 - 2 * cell_size, y1 - 2 * cell_size), radius=5, fill=pink)

    # 保存
    round_img.save(file_path)

一旦QRコードを作成して画像化し
それを加工する内容になっています。

色は pink で指定していますが
変えたい場合はコードのRGB値を変えて貰えば変わります。



実際に使ってみましょう
from PIL import Image
from IPython.display import display

# QRコードを作成(URL , ファイルパス)
create_round_qr("http://www.otupy.net/", "insta.png")

# 画像を読み込む
img = Image.open("insta.png")

# 画像を表示
display(img)
download
すごくpopな形のQRコードが作成できました。

これを配布したら、オシャレですね

今回はインスタ風の
QRコードを作成するコードについてでした

色々試して遊んでみてください。

それでは。