好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

PHP生成二维码

参数说明:

 

cht=qr:必要参数,固定值<qr>,表明要生成二维码

 

chs=<width>x<height>:必要参数,生成二维码尺寸,单位是像素,目前生成的二维码都是正方形的,所以两个宽高值都设置为一样的值

 

chl=<data>:必要参数,生成二维码包含的信息,可以是数字、字符、二进制信息、汉字。不能混合数据类型,数据必须经过UTF-8 URL-encoded.如果需要传递的信息超过2K个字节,需使用POST方式

 

choe=<output_encoding>:可选参数,编码格式。包括UTF-8/Shift_JIS/ISO-8859-1三个选项,默认为UTF-8。

 

chld=<error_correction_level>|<margin>:可选参数,

 

  error_correction_level:容错级别(共分四个等级,L-默认:可以识别已损失的7%的数据;M-可以识别已损失15%的数据;Q-可以识别已损失25%的数据;H-可以识别已损失30%的数据)

 

  margin:生成的二维码离图片边框的距离

 

 

 

例一:扫描二维码打开网址(API)

 

复制代码

<?php

//二维码信息,用urlencode编码

$data = urlencode('http://www.baidu.com');

//生成二维码尺寸

$size = '300x300';

//完整的API地址

$qrurl = "http://chart.googleapis.com/chart?chs=$size&cht=qr&chl=$data&chld=L|1&choe=UTF-8";

//获取二维码

$qrcode = file_get_contents($qrurl);

//输出图片

header('Content-type: image/png');

echo $qrcode;

复制代码

 在打开一个网站之后,我们要来实现归初的目的,扫描二维码,将企业信息导入通讯录,即在二维码中包含一个名片信息,其实二维码说白了就是将一堆信息转换为图片的形式表达,而这堆信息到底是什么样子的它并不关心,真正关心这些信息的是扫描二维码的工具,以上面的例子来说,当你用微信扫描二维码后,微信读取到二维码中储存的数据,然后尝试开始辨别它,当它发现内容是百度的网址时便使用浏览器打开它,同样的当它发现内容是一堆简单的文本数据时便以文本的形式来显示,同样的微信还可以辨别出二维码的内容是不是一个 vcard 格式的电子名片,我们的手机通讯录导入导出的时候大多是这种格式,所以我们可以直接在二维码中包含一个标准的 vcard 电子名片,这样就可以让扫描工具将它识别为通讯录。

 

复制代码

vcard 格式参考如下:

 

BEGIN:VCARD

VERSION:3.0

FN:用户名

TEL;CELL;VOICE:18858140621

TEL;WORK;VOICE:0358-2157466

TEL;WORK;FAX:0358-2157466

EMAIL;PREF;INTERNET:lzw#lzw.me

URL:http://lzw.me

orG:志文工作室

ROLE:产品部

TITLE:CTO

ADR;WORK;POSTAL:北京市朝阳区北四环中路35号;100101

REV:2012-12-27T08:30:02Z

END:VCARD

    

如果你想更详细的定制所需要的格式,请百度 vcard 的格式标准。

复制代码

 例二:生成一个名片二维码(API)

 

复制代码

<?php

//构建一个 vcard 格式数据

$vcard = 

    "BEGIN:VCARD".

    "\nVERSION:3.0".

    "\nFN:小编络络".

    "\nTEL;CELL;VOICE:18858140621".

    "\nTEL;WORK;VOICE:0358-2157466".

    "\nEMAIL:luoluo@qq.com".

    "\nURL:http://www.baidu.com".

    "\nADR:浙江省杭州市滨江区".

    "\nEND:VCARD";

 

//二维码信息,用urlencode编码

$data = urlencode($vcard);

//生成二维码尺寸

$size = '300x300';

//完整的API地址

$qrurl = "http://chart.googleapis.com/chart?chs=$size&cht=qr&chl=$data&chld=L|1&choe=UTF-8";

//获取二维码

$qrcode = file_get_contents($qrurl);

//输出图片

header('Content-type: image/png');

echo $qrcode;

复制代码

 到此为止我们归初的目的已经基本实现,但实际使用中,由于直接将上述拼装好的 url 加到了 img 标签的 src 属性,结果出了点小问题,由于我们的名片信息比较多,导致了二维码生成错误,在本文开头已经用红色字体标出,get 方式最多只能传递 2K 大的数据,大于 2K 数据时我们需要使用 POST 请求,所以在实际使用中,可以先在程序中通过 POST 方式获取二维码并保存为本地图片,之后直接调用本地图片即可。

 

 

 

方法二:使用 PHP QR CODE 生成二维码

 

官方主页:http://phpqrcode.sourceforge.net

 

下载 地址:http://sourceforge.net/projects/phpqrcode/

 

使用方法:QRcode::png($data, $filename , $errorCorrectionLevel, $matrixPointSize, $margin );

 

    * $data 数据   

    * $filename 生成二维码保存路径,如果为 false 直接输出到 浏览器   

    *$errorCorrectionLevel 错误处理级别  L、M、Q、H;同谷歌 API 中纠错级别

    * $matrixPointSize 每个黑点的像素   

    * $margin 图片外围的白色边框像素

 

 

 

例三:扫描二维码打开网址(phpqrcode)

 

复制代码

<?php

 

// 包含 qrlib.php 或 phpqrcode.php 

// 包含 qrlib.php 需要同其它文件放到一起; phpqrcode.php 是合并后版本,只需要包含这个文件,但生成的图片速度慢而且不太准确

include('./phpqrcode/qrlib.php');

 

// 二维码数据

$data = 'http://www.111cn.net';

 

// 纠错级别:L、M、Q、H

$errorCorrectionLevel = 'L';

 

// 点的大小:1到10

$matrixPointSize = 5;

 

QRcode::png($data, false, $errorCorrectionLevel, $matrixPointSize, 2);

复制代码

 

 

 例二:生成一个名片二维码(phpqrcode)

 

复制代码

<?php

// 包含 qrlib.php 或 phpqrcode.php

include('./phpqrcode/qrlib.php');

// 构建  vc ard 数据

$vcard = 

    "BEGIN:VCARD".

    "\nVERSION:3.0".

    "\nFN:王歌".

    "\nTEL;CELL;VOICE:18858140621".

    "\nTEL;WORK;VOICE:0358-2157466".

    "\nEMAIL:wang@qq.com".

    "\nURL:http://www.mailuow.com".

    "\nADR:浙江省杭州市滨江区江虹路1750号".

    "\nEND:VCARD";

 

// 纠错级别:L、M、Q、H

$errorCorrectionLevel = 'L';

 

// 点的大小:1到10

$matrixPointSize = 4;

 

QRcode::png($vcard, false, $errorCorrectionLevel, $matrixPointSize, 2);

查看更多关于PHP生成二维码的详细内容...

  阅读:41次