PHPでQRコードを作ってみよう
今回は、PHPでQRコード作る方法(QRcode Perl CGI & PHP scripts)を紹介します。
動的にQRコードを作れるという事は、PHPやPerl等の動的ページにもページ単位でQRコードを掲載することが可能です。
しかも、そのスクリプトはY.Swetake氏がフリーで配布しています。
フリーで使えるのは私達フリーのプログラマーにとって凄く助かります^^;
注意点:GDが使えることが条件となります。バージョンはGD 1.8.4 またはGD 2.0.10 以上の使用を推奨しています。(swetake.comより)
早速、QRコードを作ってみましょう。
はじめに下記のサイトから「QRcode Perl CGI & PHP scripts」をダウンロードして下さい。
2006年11月19日時点で、バージョンは0.50です。
ダウンロードが終わったら、ダウンロードした圧縮ファイルを解凍して下さい。
次にPHPを動かせるディレクトリ(仮に「home」とします)に、「qr_img」ディレクトリを作ります。
先ほど解凍したファイルの中から「data」「image」「php」の3つのディレクトリを「qr_img」ディレクトリの中に移動します。
最後に「qr_img」ディレクトリと同じ階層に「qr.php」(テスト用のプログラム)空ファイルを作ります。
最終的に以下のような構成になると思います。
[home]
└─ qr.php
│
└─[ qr_img]
└─ [data]
└─ [image]
└─ [php]
※「QRcode Perl CGI & PHP scripts」は6MB程の容量があります。
qr.phpに下記のimgタグを入れて下さい。
<img src="qr_img/php/qr_img.php?d=test">
下記のようにQRコードが生成されると思います。
このQRコードを読み取ると「test」と表示されます。
imgタグのsrc属性に「qr_img/php/qr_img.php」を指定して、引数dにはURLエンコードしたテキストを入れています。
これだけで、QRコードが自動生成されます。
これだけでは味気ないので、プログラマーらしく?動的に生成してみましょう。
qr.phpのimgタグを消して下記のコードに書き換えて下さい。
<html>
<body>
PHPでQRコードを作成する<br>
<form action="qr.php" method="post">
<textarea name="message" cols="50" rows="5"><?php echo $_POST['message']; ?></textarea><br>
<br>
<input type="submit" value="QRコードを作成する">
</form>
<br>
<?php if($_POST['message'] != ""): ?>
作成したQRコード<br>
<img src="qr_img/php/qr_img.php?d=<?php echo urlencode($_POST['message']); ?>">
<?php endif; ?>
</body>
</html>
PHPでQRコードを自動生成する(完成品)
入力フォームに記入した内容をURLエンコードして、srcの引数にセットしています。
引数「d」以外にどのような項目をセットできるのでしょうか。使用可能な引数を一部ご紹介します。
d:QRコード化するデータ(必ずURLエンコードをすること)
s:画像のサイズ(1-40)
マニュアルには1以上と書いてあったのですが、40以上を指定したら画像なしになりました。
t:「J」でJPEGになります。省略した場合はPINGになります。
ちょっとシステムを改造して以下のようなプログラムを作ってみました。
画像サイズの変更やJPEG、PINGを選択出来るようにしました。
引数にセットするだけなので、簡単に作れると思います。
引数ももっと沢山の種類がありますので、気になる方はチェックしてみて下さい。
私がPHP使いなので、PHP版を紹介しましたがPerlでも同じ物が作れるようですので興味のある方は調べてみて下さい。

コメント
どうも。
この情報、わかりやすくまとめてくれていて凄く助かりました!
ありがとうございました!
投稿者: Anonymous | 2007年10月03日 08:58
QRコード改良版のように、画像形式を選択したいのですが、試してもわかりませんのでお手数ですが解説をお願いいたします。
投稿者: QR人 | 2009年01月18日 16:44
画像の出力についても上の記事に書いてあるのですが、分かりにくかったでしょうか・・・
> t:「J」でJPEGになります。省略した場合はPINGになります。
以下のようにt引数に「J」を指定すると「JPEG」、何も指定しないと「PING」になります。
・JPEGの場合
qr_img.php?d=xxx&s=xxx&t=J
・PINGの場合
qr_img.php?d=xxx&s=xxx&t=
投稿者: Piyohiko | 2009年01月24日 19:58
ご返答ありがとうございます! わかり易く解説されていたのですが何故かS-MEMOさんのサンプル通りにならない点が1つありまして。
以下のコードなのですが、JPEG にchecked にしてあり それを PNG にしてコードを作成した後 index.phpに戻るのでまた強制的にJPEGにチェックが入ってしまいますがS-MEMOさんのは PNG のチェックが維持されていますよね。
何故なんでしょうか?
<form action="index.php" method="post">
<textarea name="message" cols="10" rows="3"><?php echo $_POST['message']; ?></textarea>
<input type="radio" name="select" value="&t=J" checked>JPEG
<input type="radio" name="select" value="">PNG
<?php $option = $_REQUEST["select"]; ?>
<img src="qr_img/php/qr_img.php?<?php echo $option; ?>&s=3&d=http://test.com?<?php echo rawurlencode($_POST['message']); ?>">
投稿者: QR人 | 2009年01月26日 21:12
checkedにつきましては、自動では出来ないので「どれにチェックが入ってるか?」というのを自作で作る必要があります。
この記事では「QRコード」を作成するのが目的でしたのでサンプルを省きました。。。
以下URLに今サンプルのソースを設置しますのでご自由にお使いください。
http://www.s-memo.net/sample/qr_code/qr_code.zip
ただし、このソースではセキュリティ上あまり好ましくない作り方をしています。(formから受け取った値をそのまま使用している)
もし、商用でお使いになるようでしたら多少改造が必要になりますのでご注意ください。
投稿者: Piyohiko | 2009年01月27日 01:42
S-MEMOさんへ
ソースまで設置頂き解説していただいてありがとうございます。
おかげ様で解決いたしました。
感謝! 感謝! 感謝!! です。
投稿者: QR人 | 2009年01月27日 12:51