python で QR コード作成
![](/images/backarrow.png)
python で QR コード作成
更新履歴
(2011.11.20)
modify L463-464 for the problem raising TypeError.(thanks to Mitsuru Sogawa and Jun Moroo.)
remove '\t' at L348.
QR コードについて
http://www.qrcode.com/
作成メモ
swetake さん(http://www.swetake.com/)が既に Perl, PHP, Ruby, Java 用のライブラリをつくってくださっているため、これを移植する。言語的に近そうなので Ruby 版を基にした。ほとんど逐語訳的となった。
つかいかた
swetake さんのライブラリで使われている qrcode_data(qrv*.dat や rsc*.dat などが入ったディレクトリ) が必要になる。http://www.swetake.com/qr/ruby/qr_rb.htmlを参考のこと。また pyqrcode.py の 24 行目でこのディレクトリへのパスを指定しているので適宜変更する。
( self.path = "./qrcode_data" # <- ここを変える )
つかいかた:
s は '1', '0' 及び '\n'からなる文字列であり、print すると'1' と '0' からなる正方形が表示される。これを '1' を黒いドット、 '0' を白いドットで描画すると QR コードになる。
import pyqrcode
data = 'my name is じょん'
a = pyqrcode.Qrcode()
s = a.make_qrcode(data)
print s
PILを使って画像にしよう:
def main(d, out):
from pyqrcode import Qrcode
import Image, ImageDraw
from math import sqrt
a = Qrcode()
qrdata = a.make_qrcode(d)
qrdata = qrdata.replace("\n","") # 改行を抜く
qrsize = int(sqrt(len(qrdata))) # データの一辺の長さ
cellsize = 2
offset = 4
sidelen = (qrsize+offset*2)*cellsize
img = Image.new("1",(sidelen, sidelen),1)
dr = ImageDraw.Draw(img)
for i,d in enumerate(qrdata):
if d == "1":
x = i%qrsize
y = i/qrsize
x0 = (x+offset)*cellsize
y0 = (y+offset)*cellsize
x1 = x0 + cellsize-1
y1 = y0 + cellsize-1
dr.rectangle((x0,y0,x1,y1),fill=0)
img.save(out,"PNG")
return
if __name__ == "__main__":
d = "http://libpanda.s18.xrea.com/swf/chinpolite2.swf"
out = "chinpolite2.png"
main(d,out)
PIL がないあなた(=わたし)へ
つかいかた
from pyqrcode import Qrcode
from qrdata2swf import qrdata2swf
from math import sqrt
data = "じょい name is man."
a = Qrcode()
qrdata = a.make_qrcode(data)
qrdata = qrdata.replace('\n','') # 改行を抜く
qrsize = int(sqrt(len(qrdata))) # データの一辺の長さ
maker = qrdata2swf()
f = open("output.swf","wb")
f.write(maker.make(qrdata=qrdata,qrsize=qrsize,cellsize=4))
f.close()
日本語は単なるバイト列として扱われるのでデコード側の文字コードに依存するが Shift_JIS にしておくのが良いようだ。