ゼロから作るQRコードジェネレータ
pythonでQRコードジェネレータを作ってみる
pythonを用いてQRコードの生成原理に基づいて画像もしくは疑似コードを生成することに挑戦する。
最終的にはTouchDesignerに移植してレスポンシブなQRコード生成を行ってみたい。
参考文献
生成原理に関しては岡山理科大学の卒業研究論文が役に立つだろう。
http://cafe.mis.ous.ac.jp/2011/sawasemi/QR%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E7%90%86%E8%AB%96%E3%81%A8%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E5%88%B6%E4%BD%9C.pdf
制作
コードはgithubに公開している。
https://github.com/CitronSeason/QRgenerator/blob/master/QRgenerator.py
表示機構をつくる
とりあえず表示機構を作る。
import sys import math class pycolor: BLACK = "\033[30m" WHITE = "\033[37m" END = "\033[1m" def retbin(bin): if bin == 1: return pycolor.WHITE + "x" + pycolor.END else: return pycolor.BLACK + "x" + pycolor.END def printQR(str): size = math.floor(math.sqrt(len(str))) print("QR length:" , len(str) , " one side" , size) i=1 for bit in str: x = retbin(1) if bit == "1" else retbin(0) sys.stdout.write(x) if i % size == 0: sys.stdout.write('\n') i += 1 printQR("1001010101010101110101001") print('\n')
printQRでは文字列から一文字ずつ切り出し1か0か判定してretbinに投げている。
retbinでは1か0で白文字か黒文字を戻り地に返す。
帰ってきたのをprintQRでstdoutしている。
正方形になるように適切にiとsizeを用いて改行させている。