2023年2月10日金曜日

QRコード(2)

QRコード(1)からの続き

前回の結果をまとめて,次のような仕様のpythonプログラム qr.py をつくる。テキストをファイルで与えるとエンコードしたQRコードの画像ファイルを生成し,逆にQRコードの画像ファイルを与えるとデコードしたテキストファイルを生成するソフトウェアである。いろいろ調べた結果を継ぎ接ぎしているだけだ。

(1) ./qr.py t hoge とすると,hoge.txt を hoge.png に変換する。
(2) ./qr.py g hoge とすると,hoge.png を hoge.txt に変換する。

#!/Users/koshi/bin/python

import sys
import qrcode
from pyzbar.pyzbar import decode
from PIL import Image, ImageGrab

foo=sys.argv[1]
bar=sys.argv[2]

if foo == 't':
    infile = bar+'.txt'
    outfile = bar+'.png'

    with open(infile, "r") as file:
        moji = file.read()
    img = qrcode.make(moji)
    img.save(outfile)

elif foo == 'g':
    infile = bar+'.png'
    outfile = bar+'.txt'

    with open(outfile, 'w') as file:
        img = Image.open(infile)
        for x in decode(img):
            moji = x[0].decode("utf-8")
            file.write(moji)
QRコードの仕様によれば,変換できる漢字かな文字数は最大1871文字までだ。726文字のサンプルで確認できた。

図:726文字のテキストに対するQRコード

726文字のこのQRコードは約7.5cm×7.5cmの面積なので,1㎠あたり13文字の情報密度になる。日本経済新聞で同じ面積の正方形に含まれる活字数を数える368文字であり,1㎠あたり6.5文字と約半分の情報密度だ。人間の目と手がQRコードに適応するよう進化していたら2倍の効率で情報伝達が可能になる・・・わけではない。

0 件のコメント: