PHP生成二维码的两个方法和实例


Posted in PHP onJuly 01, 2014

随着科技的进步,二维码应用领域越来越广泛,本站之前已有文章介绍通过使用jQuery插件来生成二维码,今天我给大家分享下如何使用PHP生成二维码,以及如何生成中间带LOGO图像的二维码。

利用Google API生成二维码

Google提供了较为完善的二维码生成接口,调用API接口很简单,以下是调用代码:

$urlToEncode="https://3water.com"; 

generateQRfromGoogle($urlToEncode); 

/** 

 * google api 二维码生成【QRcode可以存储最多4296个字母数字类型的任意文本,具体可以查看二维码数据格式】 

 * @param string $chl 二维码包含的信息,可以是数字、字符、二进制信息、汉字。 

 不能混合数据类型,数据必须经过UTF-8 URL-encoded 

 * @param int $widhtHeight 生成二维码的尺寸设置 

 * @param string $EC_level 可选纠错级别,QR码支持四个等级纠错,用来恢复丢失的、读错的、模糊的、数据。 

 *                            L-默认:可以识别已损失的7%的数据 

 *                            M-可以识别已损失15%的数据 

 *                            Q-可以识别已损失25%的数据 

 *                            H-可以识别已损失30%的数据 

 * @param int $margin 生成的二维码离图片边框的距离 

 */ 

function generateQRfromGoogle($chl,$widhtHeight ='150',$EC_level='L',$margin='0') 

{ 

    $chl = urlencode($chl); 

    echo '<img src="http://chart.apis.google.com/chart?chs='.$widhtHeight.'x'.$widhtHeight.' 

    &cht=qr&chld='.$EC_level.'|'.$margin.'&chl='.$chl.'" alt="QR code" widhtHeight="'.$widhtHeight.' 

    " widhtHeight="'.$widhtHeight.'"/>'; 

}

使用PHP二维码生成类库PHP QR Code生成二维码

PHP QR Code是一个PHP二维码生成类库,利用它可以轻松生成二维码,官网提供了下载和多个演示demo,查看地址:http://phpqrcode.sourceforge.net/。
下载官网提供的类库后,只需要使用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表示是否保存二维码并显示。

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); 

}

调用PHP QR Code非常简单,如下代码即可生成一张内容为"https://3water.com"的二维码.
include 'phpqrcode.php'; 

QRcode::png('https://3water.com');

那么实际应用中,我们会在二维码的中间加上自己的LOGO,已增强宣传效果。那如何生成含有logo的二维码呢?其实原理很简单,先使用PHP QR Code生成一张二维码图片,然后再利用php的image相关函数,将事先准备好的logo图片加入到刚生成的原始二维码图片中间,然后重新生成一张新的二维码图片。
include 'phpqrcode.php';  

$value = 'https://3water.com'; //二维码内容 

$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">';

由于二维码允许有一定的容错性,一般的二维码即使在遮住部分但仍然能够解码,经常我们扫描二维码的时候扫描到甚至不到一半时就能解码扫描结果,这是因为生成器会将部分信息重复表示来提高其容错度,这就是为什么我们在二维码中间加个LOGO图片并不影响解码结果的原因。
PHP 相关文章推荐
php下实现农历日历的代码
Mar 07 PHP
php 信息采集程序代码
Mar 17 PHP
php中判断数组是一维,二维,还是多维的解决方法
May 04 PHP
深入解析php中的foreach问题
Jun 30 PHP
深入解析Session是否必须依赖Cookie
Aug 02 PHP
9个实用的PHP代码片段分享
Jan 22 PHP
WordPress中注册菜单与调用菜单的方法详解
Dec 18 PHP
php上传图片生成缩略图(GD库)
Jan 06 PHP
PHP的Yii框架中Model模型的学习教程
Mar 29 PHP
php文件上传及下载附带显示文件及目录功能
Apr 27 PHP
php+js实现点赞功能的示例详解
Aug 07 PHP
PHP 图片处理
Sep 16 PHP
PHP中使用TCPDF生成PDF文档实例
Jul 01 #PHP
PHP中使用CURL模拟登录并获取数据实例
Jul 01 #PHP
2个比较经典的PHP加密解密函数分享
Jul 01 #PHP
PHP实现生成唯一编号(36进制的不重复编号)
Jul 01 #PHP
ThinkPHP使用smarty模板引擎的方法
Jul 01 #PHP
PHP使用GIFEncoder类处理gif图片实例
Jul 01 #PHP
ThinkPHP模板IF标签用法详解
Jul 01 #PHP
You might like
PHP:风雨欲来 路在何方?
2006/10/09 PHP
php 生成唯一id的几种解决方法
2013/03/08 PHP
PHP标准库(PHP SPL)详解
2019/03/16 PHP
IE与FireFox中的childNodes区别
2011/10/20 Javascript
javascript标签在页面中的位置探讨
2013/04/11 Javascript
JavaScript基础教程之alert弹出提示框实例
2014/10/16 Javascript
JS全局变量和局部变量最新解析
2016/06/24 Javascript
基于BootStrap与jQuery.validate实现表单提交校验功能
2016/12/22 Javascript
JS使用正则实现去掉字符串左右空格的方法
2016/12/27 Javascript
js 数字、字符串、布尔值的转换方法(必看)
2017/04/07 Javascript
react-native 完整实现登录功能的示例代码
2017/09/11 Javascript
浅谈Vue路由快照实现思路及其问题
2018/06/07 Javascript
JS中验证整数和小数的正则表达式
2018/10/08 Javascript
微信小程序实现页面浮动导航
2019/01/28 Javascript
Webpack按需加载打包chunk命名的方法
2019/09/22 Javascript
python实现得到一个给定类的虚函数
2014/09/28 Python
Python金融数据可视化汇总
2017/11/17 Python
python增加图像对比度的方法
2019/07/12 Python
Python坐标线性插值应用实现
2019/11/13 Python
Python实现自动签到脚本功能
2020/08/20 Python
Python如何实现Paramiko的二次封装
2021/01/30 Python
HTML5 Canvas 起步(2) - 路径
2009/05/12 HTML / CSS
欧洲最大的化妆品连锁公司:Douglas道格拉斯
2017/05/06 全球购物
AT&T Wireless:手机、无限数据计划和配件
2018/06/03 全球购物
英国排名第一的宠物店:PetPlanet
2020/02/02 全球购物
广州品高软件.net笔面试题目
2012/04/18 面试题
酒店出纳岗位职责
2013/12/29 职场文书
项目考察欢迎辞
2014/01/17 职场文书
司仪主持词两篇
2014/03/22 职场文书
物流专业自荐信
2014/05/23 职场文书
2014年旅游局法制宣传日活动总结
2014/11/01 职场文书
铁路安全反思材料
2014/12/24 职场文书
2015年教师自我评价范文
2015/03/04 职场文书
撤诉书怎么写
2015/05/19 职场文书
tensorflow中的数据类型dtype用法说明
2021/05/26 Python
Li list-style-image 图片垂直居中实现方法
2023/05/21 HTML / CSS