二维码的生成和使用

php生成二维码和QR图片中间加logo

一.二维码定义:

二维码(2-dimensional bar code):又称二维条码,最早起源于日本,它是用特定的几何图形按一定规律在平面(二维方向)上分布的黑白相间的图形,是所有信息数据的一把钥匙。

QR码:(学名为快速响应矩阵码;Quick Response Code)是二维条码的一种,于1994年由日本DENSO WAVE公司发明。QR来自英文Quick Response的缩写,即快速反应,因为发明者希望QR码可以让其内容快速被解码[1]。QR码最常见于日本,为目前日本最流行的二维空间条码。QR码比较普通条码可以存储更多数据。

声明:1.QR码呈正方形,常见的是黑白两色。在3个角落,印有较小,像“回”字的的正方图案。这3个是帮助解码软件定位的图案,用户不需要对准,无论以任何角度扫描,数据仍可正确被读取。

2.QR码有容错能力,QR码图形如果有破损,仍然可以被机器读取内容,最高可以到7%~30%面积破损仍可被读取。

错误修正容量

L水平      7%的字码可被修正
M水平      15%的字码可被修正
Q水平      25%的字码可被修正
H水平      30%的字码可被修正

3.读取方式:利用30万像素以上的照相手机,搭配手机内的QR码解码软件,对着QR码一照,解码软件会自动解读此信息,显示于手机屏幕上面。目前也有运用到Webcam的镜头来解码,有些人认为未来所有有镜头的科技产品,都会被导入此QR码的机制。

 

二.php生成二维码的2种方式
1.google开放api

<?php
//不足:不能变化颜色,只是黑色二维码
//==在浏览器输入$png地址,可以看到一个黑色二维码(不含LOGO)==
$size =”100×100″;//这并不是生成图片的真实尺寸,最大尺寸

$data =”www.baidu.com”;

$png = “http://chart.googleapis.com/chart?chs=”.$size.”&cht=qr&chl=”.$data.”&chld=L|1&choe=UTF-8″;
/*
生成二维码(不含logo):
chs生成二维码尺寸/
cht=qr这是说图表类型为qr也就是二维码/
chl=XXXX 为要生成的二维码数据/
chld=L|4 L代表默认纠错水平,1表二维码边界空白大小,可自行调节/
choe=UTF-8这是说内容的编码格式为UTF-8.
*/

//==========生成LOGO的二维码===============
$logo =”./1.jpg”;//中间logo图(已经存在的图片)

$QR = imagecreatefrompng($png);    //根据给定的二维码图片文件名$png取得的图像,二维码图像

$logo = imagecreatefromstring(file_get_contents($logo));//根据字符串得来的图像,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;//等比例关系。$QR_width,$logo_width,$logo_height(已知量),求的目标高度

$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);
/*
一。目标图象连接资源,
源图象连接资源,
目标 X 坐标点,
目标 Y 坐标点,
源的 X 坐标点。
源的 Y 坐标点,
目标宽度,
目标高度,
源图象的宽度,
源图象的高度
http://cn2.php.net/manual/zh/function.imagecopyresampled.php

二。生成中间带logo的二维码:
imagecopyresized()将于源的宽度$logo_width和高度$logo_height位置(0,0)并将其放置在目标的宽度$logo_qr_width和高度$logo_qr_height矩形区域,它是在位置($from_width,$from_width)的矩形区域。
如果源和目标坐标,宽度和高度不同,适当的伸展或收缩的图像片段将进行。坐标是指在左上角。
http://www.111cn.net/phper/24/php-imagecopyresized.htm
*/

header(“Content-type: image/png”);
imagepng($QR);//浏览器输出
imagedestroy($QR);
?>

2.php类库

<?php
//优点:通过修改类文件的方法,可以改变背景颜色和条码颜色,
include “./phpqrcode.php”;//引用类文件

$value=”222222″;//为要生成的二维码数据

$errorCorrectionLevel = “Q”;//二维码纠错能力大小

$matrixPointSize = 20;//二维码图片大小

QRcode::png($value, “5.png”, $errorCorrectionLevel, $matrixPointSize);//生成二维码       5.png是生成的二维码图片(不含logo)

//====同上====
$QR = “5.png”;//生成的二维码图片
$logo = “1.jpg”;//已经存在的图片

$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_height = imagesy($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);//浏览器输出
imagedestroy($QR);
?>