==关于QRcode==
QR Code码,是由Denso公司于1994年9月研制的一种矩阵二维码符号,它具有一维条码及其它二维条码所具有的信息容量大、可靠性高、可表示汉字及图象多种文字信息、保密防伪性强等优点。
==包含信息==
*符号规格从版本1(21×21模块)到版本40(177×177 模块),每提高一个版本,每边增加4个模块。
*数据类型与容量(参照最大规格符号版本40-L级):
*#数字数据:7,089个字符
*#字母数据: 4,296个字符
*#8位字节数据: 2,953个字符
*#汉字数据:1,817个字符
*数据表示方法:
深色模块表示二进制"1",浅色模块表示二进制"0"。
*纠错能力:
*#L级:约可纠错7%的数据码字
*#M级:约可纠错15%的数据码字
*#Q级:约可纠错25%的数据码字
*#H级:约可纠错30%的数据码字
*结构链接(可选)
可用1-16个QR Code码符号表示一组信息。每一符号表示100个字符的信息。
==PHP生成QRcode==
PHP QR Code是一个PHP二维码生成类库,利用它可以轻松生成二维码,官网提供了下载和多个演示demo,查看地址:http://phpqrcode.sourceforge.net/。<br>
下载官网提供的类库后,只需要使用phpqrcode.php就可以生成二维码了,当然您的PHP环境必须开启支持GD2。 phpqrcode.php提供了一个关键的png()方法,其中参数$text表示生成二位的的信息文本;参数$outfile表示是否输出二维码图片 文件,默认否;参数$level表示容错率,也就是有被覆盖的区域还能识别,
分别是:
L(QR_ECLEVEL_L,7%)
M(QR_ECLEVEL_M,15%)
Q(QR_ECLEVEL_Q,25%)
H(QR_ECLEVEL_H,30%);
参数$size表示生成图片大小,默认是3;参数$margin表示二维码周围边框空白区域间距值;参数$saveandprint表示是否保存二维码并 显示。
<br>
调用PHP QR Code非常简单,如下代码即可生成一张内容为"http://www.jb51.NET"的二维码.
include 'phpqrcode.php';
QRcode::png('http://www.jb51.net');
==生成带logo的二维码==
include 'phpqrcode.php';
$value = 'http://www.jb51.net';//二维码内容
$errorCorrectionLevel = 'L';//容错级别
$matrixPointSize = 6;//生成图片大小
//生成二维码图片
QRcode::png( $value,
'qrcode.png',
$errorCorrectionLevel,
$matrixPointSize,
2);
$logo = 'logo.png';//准备好的logo图片
$QR = 'qrcode.png';//已经生成的原始二维码图
if($logo!== FALSE) {
$QR = imagecreatefromstring(file_get_contents($QR));
$logo = imagecreatefromstring(file_get_contents($logo));
$QR_width = imagesx($QR);//二维码图片宽度
$QR_height = imagesy($QR);//二维码图片高度
$logo_width = imagesx($logo);//logo图片宽度
$logo_height = imagesy($logo);//logo图片高度
$logo_qr_width = $QR_width / 5;
$scale = $logo_width/$logo_qr_width;
$logo_qr_height = $logo_height/$scale;
$from_width = ($QR_width - $logo_qr_width) / 2;
//重新组合图片并调整大小
imagecopyresampled($QR,
$logo,
$from_width,
$from_width,
0,
0,
$logo_qr_width,
$logo_qr_height,
$logo_width,
$logo_height);
}
//输出图片
imagepng($QR,'helloweba.png');
echo'<img src="helloweba.png">';
==生成图片文件==
<?php
include 'phpqrcode.php';
$value = $_GET['url'];//二维码内容
$errorCorrectionLevel = 'L';//容错级别
$matrixPointSize = 6;//生成图片大小
//生成二维码图片
QRcode::png($value,
'qrcode.png',
$errorCorrectionLevel,
$matrixPointSize,
2);
$logo = 'jb51.png';//准备好的logo图片
$QR = 'qrcode.png';//已经生成的原始二维码图
if ($logo !== FALSE) {
$QR = imagecreatefromstring(file_get_contents($QR));
$logo = imagecreatefromstring(file_get_contents($logo));
$QR_width = imagesx($QR);//二维码图片宽度
$QR_height = imagesy($QR);//二维码图片高度
$logo_width = imagesx($logo);//logo图片宽度
$logo_height = imagesy($logo);//logo图片高度
$logo_qr_width = $QR_width / 5;
$scale = $logo_width/$logo_qr_width;
$logo_qr_height = $logo_height/$scale;
$from_width = ($QR_width - $logo_qr_width) / 2;
//重新组合图片并调整大小
imagecopyresampled($QR,
$logo,
$from_width,
$from_width,
0, 0, $logo_qr_width,
$logo_qr_height,
$logo_width,
$logo_height);
}
//输出图片
Header("Content-type:image/png");
ImagePng($QR);
==题外==
由于二维码允许有一定的容错性,一般的二维码即使在遮住部分但仍然能够解码,经常我们扫描二维码的时候扫描到甚至不到一半时就能解码扫描结果,这是因为生成器会将部分信息重复表示来提高其容错度,这就是为什么我们在二维码中间加个LOGO图片并不影响解码结果的原因。