PHPに惚れました

今でも多分惚れてます。

PHPでちょっと奥に突っ込んだQRコード生成

今更ながら、な記事かもしれませんが。

PEARパッケージ「Image_QRCode」でQRコードを生成出来ます。
よく出回ってるサンプルソース。

Image_QRCode
http://pear.php.net/package/Image_QRCode/download

<?php 
require_once("Image/QRCode.php"); 

$qr = new Image_QRCode(); 
$qr->makeCode("Hello, world"); 
?> 

特に何も意識せず使う分には上記で十分です。
オプションを加えて少し出力に変化を持たせたい場合はこちら

<?php 
require_once("Image/QRCode.php"); 

$qr = new Image_QRCode(); 
$option = array(
	"module_size"=>2,     //サイズ=>1〜19で指定
	"image_type"=>"jpeg",   //画像形式=>jpegかpngを指定
	"output_type"=>"display",  //出力方法=>displayかreturnで指定 returnの場合makeCodeで画像リソースが返される
	"error_correct"=>"H"     //クオリティ(L<M<Q<H)を指定
);
$qr->makeCode("Hello, world",$option); 
?> 

連結QRコードも作れる

連結QRコード。あんまり聞き慣れないと思いますが
簡単に言えばQRコードを分割して読み込んで一つのデータとして読み取る方法です。
f:id:Xephy:20100420230455j:image
↑と↓三つを読み込んだデータは同じです。連結データは読み込む順番もバラバラでも構わないです。
f:id:Xephy:20100420230454j:image
f:id:Xephy:20100420230453j:image
f:id:Xephy:20100420230452j:image

利用方法

オプションとしてもたせられる値は4つ。

    • nの値で何分割するかを指定、
    • mの値で今何分割目のデータを出力かを指定、

nとmは必須となるでしょう。

    • parityで属性を指定(同じ属性値を持たせないと関連付けられたものとみなさい→読み取りエラー)

ここは省略可能です。

    • originaldataで元データ。こっちも同じ値をもたせないよ読み取りエラーに。 詳細は不明。

これも省略可能。

"n"=>3, //データを分割する数(この場合3分割)
"m"=>1, //何分割目か(3分割中1つ目のデータとして出力)
"parity"=>"", //属性(無指定)
"originaldata"=>"" //元データ(無指定)

3分割中1つ目のデータを吐き出す

<?php 
require_once("Image/QRCode.php"); 

$qr = new Image_QRCode(); 
$option = array(
	"module_size"=>2, 
	"image_type"=>"jpeg",
	"output_type"=>"display",
	"error_correct"=>"H"
);
$append=array(
	"n"=>3,  //データを分割する数
	"m"=>1,  //何分割目か
);

$qr->makeCode("Hello, world",$opption,$append); 
?> 

3分割中2つ目のデータを吐き出す

<?php 
require_once("Image/QRCode.php"); 

$qr = new Image_QRCode(); 
$option = array(
	"module_size"=>2, 
	"image_type"=>"jpeg",
	"output_type"=>"display",
	"error_correct"=>"H"
);
$append=array(
	"n"=>3,  //データを分割する数
	"m"=>2,  //何分割目か
);

$qr->makeCode("Hello, world",$opption,$append); 
?> 

3分割中3つ目のデータを吐き出す

<?php 
require_once("Image/QRCode.php"); 

$qr = new Image_QRCode(); 
$option = array(
	"module_size"=>2, 
	"image_type"=>"jpeg",
	"output_type"=>"display",
	"error_correct"=>"H"
);
$append=array(
	"n"=>3,  //データを分割する数
	"m"=>1,  //何分割目か
);

$qr->makeCode("Hello, world",$opption,$append); 
?> 

簡単ですね!