乙Py先生のプログラミング教室
初学者のためのプログラミング学習サイト

QRコード

今回はインスタ風の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コードを作成するコードについてでした

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

それでは。

今回はバーコードやQRコードを生成する
プログラムを作ってみました。

解説動画はこちら



さて
QRコードはPythonで簡単に作る事ができます。

Google Colab上で動くようにしたので
早速ライブラリをインストールしてみましょう。
!pip install pyqrcode
!pip install pypng
!pip install python_barcode
!pip install pyzbar
!apt install libzbar0
これで準備完了です。


まずはQRコードを作ってみましょう。

pyqrcodeを用います。
ライブラリを読み込んで
表示させるためのテキストを打ち込みます。

import pyqrcode

content = '私はおっぱいが大好きです'
c = pyqrcode.create(content=content,error='H') 
c.png(file='oppai_daisuki.png',scale=6)

from IPython.display import Image as disp
disp('oppai_daisuki.png')
download-2
暇な方はQRを読み込みしてみてください。
カメラアプリなどから読み込めると思います。


続いてQRコードの読み取りです。
読み取りはpyzbarを用います。
from pyzbar.pyzbar import decode
from PIL import Image

d = decode(Image.open('oppai_daisuki.png'))
print(d[0].data.decode("utf-8"))
私はおっぱいが大好きです


続いてバーコードの作成です。

バーコードは結構な種類があります。
今回は「ean13」というものです。

コードの体系は
国コード(2桁)
メーカコード(5桁)
商品コード(5桁)
チェックディジット(1桁)
となっており12桁入力すると
自動で最後の一桁、チェックディジットが
計算される仕組みです。

12桁の数字を打ち込みしましょう。

import barcode
from barcode.writer import ImageWriter

maker = barcode.get_barcode_class('ean13') 
num = '123456789902' #12桁入力
code = maker(num,writer=ImageWriter()) 
code.save('number')

from IPython.display import Image as disp
disp('number.png')
download-1



バーコードの読み取りは
こちらです。


from pyzbar.pyzbar import decode
from PIL import Image

d = decode(Image.open('number.png'))
print(d[0].data.decode("utf-8"))
1234567899022



最後に画像にQRコードを埋め込んでみましょう。

最初に背景画像を用意しておいて
Colabにアップロードしておいてください。

どこに配置するかを指定するので
指定場所をposに数値で入力してください。

import pyqrcode
from PIL import Image

# 背景画像
img1 = Image.open('kurochan.png')

# QRコード
content = 'http://www.otupy.net/'
c = pyqrcode.create(content=content,error='H') 
c.png(file='tmp.png',scale=3)
img2 = Image.open('tmp.png')

# 配置場所
pos = (img1.size[0] - img2.size[0], img1.size[1] - img2.size[1])
#pos = (img1.size[0] //3 , img1.size[1] //7)
img1.paste(img2, pos)
img1.save('otupy.png')

# 表示
from IPython.display import Image as disp
disp('otupy.png')
download

こんな感じでQR埋め込みの画像が作成できます。
めちゃくちゃ簡単ですね!!!

こんなに簡単にバーコードなどを
作成できるとは思いませんでした。

結構遊べますね。
URL配るとか、名刺に挟むとか
いろいろ使えると思います。

今回はこれまでです
それでは。

このページのトップヘ