レシピ
プラットフォーム:HTTPサーバー
使用言語:PHP 4.0以上
GDライブラリ ver2.0以上
※サーバーサイドで動作するものを作成する場合は,HTTPサービス(Apacheなど)とPHPが動作する環境が必要です。

 今回は,任意の文字列を含むQRコード画像をプログラムで作成する方法をご紹介します。最近見かける機会が多くなったQRコードですが,ざっと調べていただくとおわかりの通り,作成には専用ソフトの購入が必要です。ところがQRコードを生成するためのライブラリという大変貴重なものをフリーウエアとして公開しているフリーソフト作者さんがいらっしゃいます。今回はこのライブラリを使用してQRコード作成プログラムを作ってみます。

QRコードとはどういうものか

 QRコードと言われてもピンとこない人も,下記の画像を見れば「ああ,見たことがある」と納得していただけるでしょう。

図1●QRコードのサンプル。ITpro startのURLが埋め込まれています
図1●QRコードのサンプル。ITpro startのURLが埋め込まれています

 携帯電話のすべてのキャリアでほぼ全機種にQRコードの読み取り機能が搭載されています。カメラで読み込むことでテキスト情報を簡単に取得できるQRコードは,元々テキスト入力に向かない(一部メールの達人は除く)携帯電話に一度にたくさんの文字情報を与える手段として最適です。

 QRコードは印刷物に印刷されるほか,最近ではケータイ版サイトへの誘導のためにPCサイトにも表示されることが多くなりました。パソコンのディスプレイがCRT全盛だった時代には,カメラで撮影するとちらつきが写ってしまい,画面上に映っているものを取り込むことは困難でしたが,現在は液晶ディスプレイが主流なので,ケータイのカメラを使ってPC画面を撮影することも簡単です。QRコードの普及にはこうしたディスプレイ事情なども大きく絡んでいるようです。QRコードを取り込んだ経験のない方は,ぜひこの機会に上記画像で試してみてください。

 目にする機会から広告のためだけのものに思えますが,例えば個人でも名刺にQRコードを印刷しておくと,電話番号やメールアドレスを手で入力しなくても,簡単にアドレス帳に取り込むことができます。ワン切りしつつ番号交換といった無駄も必要なくなり,ちょっとスマートなIT生活になれます。

 QRコードは,デンソーウェーブが特許を保有しています。ただし同社は特許権を行使しないことを宣言していて,誰でも自由に使用できます。権利関係その他詳細情報はデンソーウェーブが運営しているQR Code.comで確認してください。紙幅の関係もあり,この記事ではQRコードの細かい仕様までは言及しません。

QRコード作成ライブラリの入手

 QR Code.comでも紹介されているように,QRコードの生成は一般的には作成ツールの購入が必要です。しかしQRコードを作成するためのY.Swetake氏作ライブラリ「QRcode Perl/CGI & PHP scripts ver. 0.50g」がフリーソフトとして公開されています。私たちプログラマはこのライブラリを使って,QRコードの生成プログラムを作ることができます。ダウンロード後に解凍したらREADME.txtは必ずご一読ください。

 QRcode Perl/CGI & PHP scriptsにはJava/Perl/Ruby対応版がありますが,今回はPHP版を使用します。

 「QRcode Perl/CGI & PHP scripts ver. 0.50g」を解凍すると四つのフォルダがでてきます(図2)。このうちPerlフォルダはPerlでQRコードを生成するためのプログラムなので今回は使用しません。

図2●解凍後のファイルとフォルダ。README.txtは一読のこと。Perlフォルダ内のファイルは今回使用しません
図2●解凍後のファイルとフォルダ。README.txtは一読のこと。Perlフォルダ内のファイルは今回使用しません

サンプルの作成

 サンプルを作ってみましょう。実行するにはApacheのようなHTTPサービス(Webサーバー)と,そのサーバーでPHPが動作しGDライブラリのバージョン2.0以上がインストールされている必要があります。

 任意の文字データを含むQRコード表示させるためのPHPプログラムを作成します。名前はqr.phpにしておきます(リスト1)。

<?php
$src = $_GET[src];

if(!$src){

        ・
        ・
        ・
リスト1●qr.php

 このqr.phpはことさら難しいことは何もしていなくて,<img src="php/qr_img.php?d=$src_enc&t=J&s=4">というHTMLタグでQRコード生成ライブラリを呼んでいます。$src_encの部分にはテキストエリアに入力された文字をURLエンコードした文字列が入ります。フォームの送信先は自分自身になっています。もしGET引数がこなければ,初期値の「日経ITpro Start」というテキストとURLが入ったQRコードが生成されて表示されます。

 表示はJPEG形式とPNG形式の2種で,それぞれ大・中・小の3種類を作成します。サイズは「s=4からs=2」までの指定部分で調整していますが,QRcode Perl/CGI & PHP scriptsはQRコードに含まれるテキストの量によって,表示サイズが大きくなったり小さくなったりします。「s=4」のような指定は画像サイズの完全なサイズ指定ではありません。画像サイズを固定させたい場合には<img src="php/qr_img.php?d=$src_enc&t=P&s=2" height="150" width="150" />のようにimgタグ側で固定サイズ指定する必要があります。

Webサーバーへのアップロード

 qr.phpと図2のフォルダのうちPerlを除いた3フォルダをWebサーバーにFTPなどの手段でアップロードします。READMEファイル三つはアップロードする必要はありません。READMEファイルと同じ階層にqr.phpを配置してください。dataとimageのディレクトリにはQRコードを描画するのに必要なデータと画像が入っています。PerlのCGIと違ってパーミッション設定は特に必要ありません。

 サンプルの実行はPHPが実行できるWebサーバーである必要があります。プロバイダの無料HPスペースなどでは使用できないことがあります。ローカル・マシンのWindowsに,ApacheやIISのようなHTTPサービスを組み込んで実行することもできます。

 アップロードが終わったらqr.phpをブラウザから呼び出してください。図3と同じ画面が表示されます。

図3●サンプルの実行画面。JPEG形式とPNG形式で生成されます
図3●サンプルの実行画面。JPEG形式とPNG形式で生成されます

プログラム改善に向けてのポイント

 QRcode Perl/CGI & PHP scriptsによるQRコード生成は,とても簡単です。しかしながら一部不満点がないこともありません。

1.絶対サイズが指定できない
「s=n」で指定できるサイズは概算サイズでテキスト内容によって大きさが変化する

2.画像形式がJPEGとPNGしかない
GIF/BMP形式のような選択肢を選択できない

3.背景色が常に白になる
HPで利用する場合に背景色と合わせるといったことができない(図4

4.サンプルの使い方だと外部サイトから勝手に使用されかねない
http://×××/php/qr_img.php?d='test' のような呼び出しで規制なくアクセスされる

図4●生成されるQRコードの背景色は白で固定。HTMLの背景色を設定してみるとよくわかります。サイトのデザインから浮いてしまう可能性もあります。
図4●生成されるQRコードの背景色は白で固定。HTMLの背景色を設定してみるとよくわかります。サイトのデザインから浮いてしまう可能性もあります。

 もちろん自前でISOの規格を調べてフルスクラッチすることから比べたら,不満というよりは欲のレベルのお話です。けっしてY.Swetake氏の労力を否定するものではありません。

 こうした問題点を解決する方法が果たしてあるか,ということです。答えは「あります」です。その方法については次回にご紹介していくことにしましょう。

園田 誠(そのだ まこと)
最近フリーライターという肩書きもどうなんだろうと自分で思うようになり「コンテンツ・パンチャ」という職業を勝手に自称するようになりました。書いてるのが文章だけでなくて,プログラムやWebページだったりするし,writeしているというよりはpunch inしてるんですよね。時代に即すって大切なことなわけで,もう巷ではレコード屋とは言わずCD屋というわけですし,いつまでもwriterじゃないだろうと。日本語で「文章屋」でも悪くないけど,そうするとプログラムが・・。変なことに悩み続ける41歳の夏。http://www.japan.xitami.net/