プログラミングノート

忘れないためにプログラミングTipsをメモしていく。本当にメモ程度のこともあれば、かっちり書くこともある

ゼロから作るQRコードジェネレータ

pythonQRコードジェネレータを作ってみる

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を用いて改行させている。