Data Matrixを生成する
最近すっかりフツーなシステム開発をすることも多いので、たまたま2次元バーコードの一つであるData Matrixをいじる機会がありました。
QRコードの生成は解説ページがすぐ見つかるのですが、PythonでData Matrixを生成するlibdmtx wrapperの解説が(大元のドキュメントにも)見当たらなかったのでメモ。
- libdmtx Python Wrapper -- http://libdmtx.wikidot.com/libdmtx-python-wrapper
libdmtx Python Wrapperのインストール
CentOS 6.5ではyumでインストールできます。ただしPIL(Python Imaging Library)が自動でインストールされないのでPILのインストールも必要です。
# yum install python-libdmtx # yum install python-imaging
これで使うことができます。
Data Matrixを生成する
生成だけならすぐです。細かいオプションは不明…
#!/usr/bin/env python # -*- coding: utf-8 -*- from pydmtx import DataMatrix dm = DataMatrix() dm.encode(u"これはテストデータです".encode("shift_jis")) dm.save("test.png", "png")
日本語はShiftJISにしてからエンコード(Data Matrix生成)をします。
で、それをPNGで保存すればOKです。
なお、文字列としてバッファに入れたい場合(オンザフライで出力するなど)はStringIOを使います。例えば、
from StringIO import StringIO buf = StringIO() dm.save(buf, "png")
とすればbufに格納されます。buf.getvalue()で値を取り出すことができます。
こんな感じ。
イメージとして扱う
Data Matrixのイメージを取り出したい場合は、
dm.image
でPIL(Python Imaging Library)のImageオブジェクトが取り出せるので、加工や貼り付けを簡単に行うことができます。
私はずらっと出力したかったので、横に並べてテプラで印刷して使ってます。
コンストラクタのオプション
DataMatrixオブジェクトを生成するときにサイズや形状の調整ができます。例えばこんな感じ。
dm = DataMatrix(shape=DataMatrix.DmtxSymbolRectAuto, module_size=2)
指定できるオプション
オプション | 値の例 | 内容 |
module_size | 4 | 1ドットの大きさ。これでサイズが決まります |
margin_size | 8 | マージンの大きさ |
gap_size | ? | |
scheme | エンコード方法? | |
shape | 下記参照 | マトリックスの形 |
shapeを設定することでサイズや形(正方形 or 長方形)を指定できます。
shapeの値
値 | 内容 |
DataMatrix.DmtxSymbolShapeAuto | 自動判別? |
DataMatrix.DmtxSymbolSquareAuto | 正方形(サイズ自動) |
DataMatrix.DmtxSymbolRectAuto | 長方形(サイズ自動) |
DataMatrix.DmtxSymbol10x10 | サイズ指定 |
サイズ指定は10x10から144x144までいろいろあります。詳しくはpydmtx.pyを参照のこと。