Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

php_qrがバージョンアップ

速攻で改良版(0.1.2)が出ています :-)

  • for PHP4/5
    • 出力形式に対応した MIME タイプを返す関数 string qr_mimetype(int $format) を追加。
  • for PHP5 only
    • 出力形式に対応した MIME タイプを返すメソッド string QRCode::getMimeType(void) を追加。
    • QRコードシンボルをイメージリソースとして返すメソッド resource QRCode::getImageResource(void) を追加。

imagecopy() で他の画像に QRコードを埋め込む等の利用方法を想定。

qr_mimetypeは前のエントリのサンプルコードが元で実装されたそうで。ありがとうございます :-) 今回はOO的に書いてみました。finalizeし忘れてハマりました。。。

<?php
!extension_loaded('qr') && (dl('qr.so') || exit(1));
$data = 'サンプルをさらに変えてみました';
$data = mb_convert_encoding($data, 'sjis-win', 'eucjp-win');
$options = array(
    'format' => QR_FMT_PNG,
    'magnify' => 2,
);

$qr = new QRCode($options);
$qr->addData($data, QR_EM_AUTO);
$qr->finalize();

header('Content-Type: ' . $qr->getMimeType());
echo $qr->getSymbol();

また、0.1.2ではイメージリソースとして取得できるようになっているようです。ということは「サイトロゴとURLのQRコード」を動的に作るとか「写真とQRコード」とか、いろいろできそうですね。
あ。QRを表示する、もしくはデータを返すだけのRESTサービスもできそう。バイナリのまま返すのも何なので、BASE64エンコードすりゃ良いかと思ったんですが、受け取り側はどうしよう。。。ということで、ちょっと調べてみたんですが、そういえばimg要素のsrc属性って、

<img id="qr2" src="data:image/png;base64,iVBORw...==">

みたいにそのまま埋め込めたんでしたっけ。。。となると、あとは画像の差し替えをjavascript使ってサクッとできそうですね。