QRコードをつくるためにpyqrcodeをインストール
pyqrcodeでpngとして保存するためにpypngが必要なのでインストール
pip3 install pyqrcode
pip3 install pypng
画像を少し加工するのでopencvをconda install
でいれました。
import pyqrcode
## error: 誤り訂正レベル L<M<Q<H
## version 型番 1-40 大きいとコードのサイズとデータ容量が増える
qrcode = pyqrcode.create('https://skimie.com', error='H', version=4)
## 書き出し
qrcode.png('code1.png', scale=10, module_color=[0, 0, 0, 255], background=[255, 255, 255])
実行結果
簡単に作れます。
スマホのQRコードリーダー等をかざせば’https://skimie.com’と表示されます。
QRコードには誤り訂正機能がある。
誤り訂正レベルHならで約30%までは復元可能らしい
なので真ん中を欠けさせてた。
import pyqrcode
import cv2
qrcode = pyqrcode.create('https://skimie.com', error='H', version=4)
qrcode.png('code1.png', scale=10, module_color=[0, 0, 0, 255], background=[255, 255, 255])
qr = cv2.imread('code1.png')
qr[150:260,150:260] = 255
cv2.imwrite('code2.png', qr)
実行結果
読み込めたので大丈夫そうです。
せっかくなので欠けさせた部分にイラストを埋め込んでみました。
実行時にコマンドライン引数としてQRコードが表すdata(第1引数)と埋め込みたい画像(正方形推奨)へのpath(第2引数)を指定します。
import pyqrcode
import cv2
import sys
## いい感じにイラストの色にQRコードの色を合わせる
def get_mean_color(img):
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_,thresh = cv2.threshold(img_gray,127,255,1)
bgr = cv2.mean(img, mask=thresh)
return bgr
## QRコード作成
def mkqrcode(file_path,data):
illa = cv2.imread(file_path)
## 入れ込むイラストのサイズを調整
illa = cv2.resize(illa,(110,110))
## QRコードの色を決める
bgr = get_mean_color(illa)
## QRコード作成
qrcode = pyqrcode.create(data, error='H', version=4)
qrcode.png(
'output_{}'.format(file_path),
scale=10,
module_color=[bgr[2], bgr[1], bgr[0], 255],
background=[255, 255, 255])
qr = cv2.imread('output_{}'.format(file_path))
## 埋め込む
qr[150:260,150:260] = illa
## 書き出し
cv2.imwrite('output_{}'.format(file_path),qr)
## コマンドライン引数に埋め込む画像へのpath(第1引数)とQRコードで表すデータ(第2引数)を指定
def main():
if len(sys.argv) == 3:
data = sys.argv[1]
img_path = sys.argv[2]
else:
sys.exit(1)
mkqrcode(img_path,data)
sys.exit(0)
if __name__ == '__main__':
main()
実行結果例
なんかいい感じになったので満足
例1)
例2)
例3)
例4)