使用二维码生成类库PHP QR Code生成二维码
- 下载PHP QR Code类库文件
http://phpqrcode.sourceforge.net/
- 把
phpqrcode.php
加载到项目代码中 - 使用
QRcode::png()
方法即可生成二维码
//png()方法源码:
public static function png($text, $outfile=false, $level=QR_ECLEVEL_L, $size=3, $margin=4,$saveandprint=false)
{
$enc = QRencode::factory($level, $size, $margin);
return $enc->encodePNG($text, $outfile, $saveandprint=false);
}
png()
参数说明:
参数 | 含义 |
---|---|
$text | 生成二位的的信息文本 |
$outfile | 是否输出二维码图片文件,若要,需给含路径的filename |
$level | 容错率,L(7%),M(15%),Q(25%),H(30%),默认L |
$size | 生成图片大小,默认3 |
$margin | 二维码周围边框空白区域间距值 |
$saveandprint | 是否保存二维码并显示 |
USAGE
include_once 'phpqrcode.php';
QRcode::png('http://www.baidu.com','D:/server/project/myy.png');
在生成的二维码中间放入logo图片
原理:利用二维码的容错性,即使被遮住了一部分,依然能够被正常识别。然后利用php的image函数合并二维码图片和logo图片即可
USAGE
include_once 'phpqrcode.php';
$text = 'http://www.carisok.com/apps/mall.html';
$qrcode_file = './img/qrcode.png';
$level = 'M';
$size = 6;
$margin = 4;
QRcode::png($text, $qrcode_file, $level, $size, $margin);
$logo = './img/logo.png';
$qr_logo_img = './img/qr_logo.png';
if (is_file($logo) && is_file($qrcode_file)) {
if (is_file($qr_logo_img)) {
echo '<img src="'.$qr_logo_img.'">';
exit;
}
$qr = imagecreatefrompng($qrcode_file);
$logo = imagecreatefrompng($logo);
$qr_width = imagesx($qr); //二维码图片宽度
$qr_height = imagesy($qr); //二维码图片高度
$logo_width = imagesx($logo); //logo图片宽度
$logo_height = imagesy($logo); //logo图片高度
$qr_log_width = $qr_width/6;
$scale = $logo_width/$qr_log_width;
$qr_log_height = $logo_height/$scale;
$dst_x = ($qr_width - $qr_log_width)/2;
$dst_y = $dst_x;
//重组合并图片
//在$qr的$dst_x,$dst_y位置,插入一张图片。该图片:
//从$logo(大小$logo_width,$logo_height)的0,0位置获取长宽$qr_log_width,$qr_log_height的大小。
//新图片尺寸是计算的等比例,因此会比较清晰
imagecopyresampled($qr, $logo, $dst_x, $dst_y, 0, 0, $qr_log_width, $qr_log_height, $logo_width , $logo_height);
//输出图片
imagepng($qr, $qr_logo_img);
echo '<img src="'.$qr_logo_img.'">';
} else {
die('resource is error!');
}
上面用例生成结果如下: