php_qr-0.1.0

php_qr-0.1.0.tgz
PHP4/5 用の QRコード生成拡張モジュールです。

インストール方法

通常の PHP 拡張モジュール同様にインストールできます。

tar xfz php_qr-0.1.0.tgz
cd php_qr-0.1.0
phpize
./configure --enable-qr
make
sudo make install

PHP の GD エクステンションを使った GIF, JPEG, PNG, WBMP 出力を有効にするには --enable-qr-gd オプションを使います。
zlib で圧縮した TIFF 出力を有効にするには --with-qr-tiff オプションを使います。

tar xfz php_qr-0.1.0.tgz
cd php_qr-0.1.0
if ! -f /path/to/php-install-dir/include/php/ext/gd/libgd/gd.h; then
  mkdir -p ext/gd/libgd
  cp /path/to/php-src/ext/gd/libgd/gd.h ext/gd/libgd
  cp /path/to/php-src/ext/gd/libgd/gdhelpers.h ext/gd/libgd
fi
/path/to/php-install-dir/bin/phpize
./configure --enable-qr --enable-qr-gd --with-qr-tiff=/path/to/zlib-install-dir --with-php-config=/path/to/php-install-dir/bin/php-config
make
sudo make install

PHP4/5 共通の機能

以下の関数が提供されます。

string qr_get_symbol(string $data[, array $options]);
int qr_output_symbol(mixed $output, string $data[, array $options]);
string qrcode(string $data[, array $options]);

qr_get_symbol() は $data を QRコードシンボルに変換して返します。シンボルの生成に失敗したときは false を返します。
qr_output_symbol() の第一引数 $output には出力先のファイル名もしくは書き込み可能なストリームリソースを指定します。$output が空文字列または null の場合は通常の出力バッファに書き込みます。それ以外の場合はエラーとなります。返り値はストリームに書き込まれたバイト数で、失敗したときは false を返します。
qrcode() は qr_get_symbol() のエイリアスです。


$options で符号化および出力の詳細な設定をします。

  • version (default: -1)
    • 生成する QRコードシンボルの型番 (1-40)。-1 の場合、通常の QRコードでは自動選択、構造的連接の場合は 1 となる。
  • mode (default: QR_EM_AUTO)
    • 符号化モード。以下から選択。
      • QR_EM_AUTO (自動選択)
      • QR_EM_NUMERIC (数字)
      • QR_EM_ALNUM (英数字)
      • QR_EM_8BIT (8ビットバイト)
      • QR_EM_KANJI (漢字)
  • eclevel (default: QR_ECL_M)
    • 誤り訂正レベル。以下から選択。
      • QR_ECL_L (レベルL: 7%)
      • QR_ECL_M (レベルM: 15%)
      • QR_ECL_Q (レベルQ: 25%)
      • QR_ECL_H (レベルH: 30%)
  • masktype (default: -1)
    • マスクパターン種別 (1-7)。-1 なら自動選択。
  • format (default: QR_FMT_DIGIT)
  • magnify (default: 1)
    • 1 モジュールあたりの大きさ (1-16)。
  • separator (default: 4)
    • 分離パターン幅 (0-16)。既定値の 4 は QRコード規格上の下限。
  • maxnum (default: 1)
    • シンボル数。1 なら通常の QRコード、2 から 16 の場合は構造的連接 (連結コード) を生成する。それ以外はエラー。
  • order (default: 0)
    • 構造的連接の場合のシンボルの並べ方。0 ならなるべく正方形に近くなるように、正の数なら横に order 個ずつ、負の数なら縦に |order| 個ずつ並べる。多次元配列として出力する JSON では無視される。

PHP5 専用の機能

オブジェクト指向API もあり、こちらでは符号化モードを混在した QRコードを作成したりできます。
説明はまた後日。

使用例

function qr_output_symbol()

<?php
!extension_loaded('qr') && (dl('qr.so') || exit(1));

$data = 'QRコードは、株式会社デンソーウェーブの登録商標です。';
$data = mb_convert_encoding($data, 'SJIS-win', 'UTF-8');
$options = array(
    'mode' => QR_EM_KANJI,
    'format' => QR_FMT_BMP,
    'magnify' => 2,
);
qr_output_symbol('qr.bmp', $data, $options);


class QRCode

<?php
!extension_loaded('qr') && (dl('qr.so') || exit(1));

$data = 'QRコードは、株式会社デンソーウェーブの登録商標です。';
$data = mb_convert_encoding($data, 'SJIS-win', 'UTF-8');

$qr = new QRCode(array('version' => 1, 'maxnum' => 16));

$qr->addData($data, QR_EM_KANJI);

$qr->finalize();

$qr->setFormat(QR_FMT_TIFF);
$qr->setMagnify(2);
$qr->setOrder(-1);
$qr->outputSymbol('qr.tiff');

$qr->setFormat(QR_FMT_BMP);
foreach ($qr as $pos => $symbol) {
    file_put_contents(sprintf('qr%d.bmp', $pos + 1), $symbol);
}