#keywords(Python,Data Matrix,libdmtx)
 [[どぶお/Pythonで遊ぼう!]]
 * Data Matrixを生成する [#e2b3534b]
 最近すっかりフツーなシステム開発をしているので、たまたま2次元バーコードの一つであるData Matrixをいじる機会がありました。~
 最近すっかりフツーなシステム開発をすることも多いので、たまたま2次元バーコードの一つであるData Matrixをいじる機会がありました。~
 QRコードの生成は解説ページがすぐ見つかるのですが、PythonでData Matrixを生成するlibdmtx wrapperの解説が(大元のドキュメントにも)見当たらなかったのでメモ。
 
 - libdmtx Python Wrapper -- http://libdmtx.wikidot.com/libdmtx-python-wrapper
 
 ** libdmtx Python Wrapperのインストール [#ndcf26cd]
 CentOS 6.5ではyumでインストールできます。ただしPIL(Python Imaging Library)が自動でインストールされないのでPILのインストールも必要です。
 
  # yum install python-libdmtx
  # yum install python-imaging
 
 これで使うことができます。
 
 ** Data Matrixを生成する [#m56edf53]
 生成だけならすぐです。細かいオプションは不明…
 
  #!/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()で値を取り出すことができます。
 
 #ref(dmtx_test.png)
 
 こんな感じ。
 
 ** イメージとして扱う [#aaf9d83a]
 Data Matrixのイメージを取り出したい場合は、
  dm.image
 でPIL(Python Imaging Library)のImageオブジェクトが取り出せるので、加工や貼り付けを簡単に行うことができます。~
 私はずらっと出力したかったので、横に並べてテプラで印刷して使ってます。
 
 ** コンストラクタのオプション [#rbbbfb93]
 DataMatrixオブジェクトを生成するときにサイズや形状の調整ができます。例えばこんな感じ。
  dm = DataMatrix(shape=DataMatrix.DmtxSymbolRectAuto, module_size=2)
 
 *** 指定できるオプション [#zfabc051]
 |オプション |値の例|内容|h
 |           |CENTER:||c
 |module_size|4|1ドットの大きさ。これでサイズが決まります|
 |margin_size|8|マージンの大きさ|
 |gap_size   | |?|
 |scheme     | |エンコード方法?|
 |shape      |下記参照|マトリックスの形|
 shapeを設定することでサイズや形(正方形 or 長方形)を指定できます。
 
 *** shapeの値 [#l8c73ef3]
 |値                             |内容|h
 |DataMatrix.DmtxSymbolShapeAuto |自動判別?|
 |DataMatrix.DmtxSymbolSquareAuto|正方形(サイズ自動)|
 |DataMatrix.DmtxSymbolRectAuto  |長方形(サイズ自動)|
 |DataMatrix.DmtxSymbol10x10     |サイズ指定|
 サイズ指定は10x10から144x144までいろいろあります。詳しくはpydmtx.pyを参照のこと。