PHP基于phpqrcode类生成二维码的方法详解


Posted in PHP onMarch 14, 2018

本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:

使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。

前期准备:

1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)

方法解读:

下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):

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

第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
第4个参数$size:控制生成图片的大小,默认为4;
第5个参数$margin:控制生成二维码的空白区域大小;
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;

使用示例:

1. 生成二维码(生成图片文件)

// 1. 生成原始的二维码(生成图片文件)
function scerweima($url=''){
  require_once 'phpqrcode.php';
  $value = $url;         //二维码内容
  $errorCorrectionLevel = 'L';  //容错级别
  $matrixPointSize = 5;      //生成图片大小
  //生成二维码图片
  $filename = 'qrcode/'.microtime().'.png';
  QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
  $QR = $filename;        //已经生成的原始二维码图片文件
  $QR = imagecreatefromstring(file_get_contents($QR));
  //输出图片
  imagepng($QR, 'qrcode.png');
  imagedestroy($QR);
  return '<img src="qrcode.png" alt="使用微信扫描支付">';
}
//调用查看结果
echo scerweima('https://www.baidu.com');

2. 在生成的二维码中加上logo(生成图片文件)

//2. 在生成的二维码中加上logo(生成图片文件)
function scerweima1($url=''){
  require_once 'phpqrcode.php';
  $value = $url;         //二维码内容
  $errorCorrectionLevel = 'H';  //容错级别
  $matrixPointSize = 6;      //生成图片大小
  //生成二维码图片
  $filename = 'qrcode/'.microtime().'.png';
  QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
  $logo = 'qrcode/logo.jpg'; //准备好的logo图片
  $QR = $filename;      //已经生成的原始二维码图
  if (file_exists($logo)) {
    $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 / 4;   //组合之后logo的宽度(占二维码的1/5)
    $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
    $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
    $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点
    //重新组合图片并调整大小
    /*
     * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
     */
    imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
  }
  //输出图片
  imagepng($QR, 'qrcode.png');
  imagedestroy($QR);
  imagedestroy($logo);
  return '<img src="qrcode.png" alt="使用微信扫描支付">';
}
//调用查看结果
echo scerweima1('https://www.baidu.com');

PHP基于phpqrcode类生成二维码的方法详解

3. 生成二维码(不生成图片文件)

//3. 生成原始的二维码(不生成图片文件)
function scerweima2($url=''){
  require_once 'phpqrcode.php';
  $value = $url;         //二维码内容
  $errorCorrectionLevel = 'L';  //容错级别
  $matrixPointSize = 5;      //生成图片大小
  //生成二维码图片
  $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
}
//调用查看结果
scerweima2('https://www.baidu.com');

前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。

PHP 相关文章推荐
实时抓取YAHOO股票报价的代码
Oct 09 PHP
如何删除多级目录
Oct 09 PHP
Mysql中limit的用法方法详解与注意事项
Apr 19 PHP
PHP采集利器 Snoopy 试用心得
Jul 03 PHP
基于MySQL到MongoDB简易对照表的详解
Jun 03 PHP
浅析PHP程序防止ddos,dns,集群服务器攻击的解决办法
Jun 18 PHP
php生成静态页面的简单示例
Apr 17 PHP
Codeigniter生成Excel文档的简单方法
Jun 12 PHP
ecshop后台编辑器替换成ueditor编辑器
Mar 03 PHP
PHP实现无限级分类(不使用递归)
Oct 22 PHP
WordPress中对访客评论功能的一些优化方法
Nov 24 PHP
PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决
Apr 17 PHP
PHP判断是否是微信打开,浏览器打开的方法
Mar 14 #PHP
Laravel模型事件的实现原理详解
Mar 14 #PHP
PHP实现根据数组某个键值大小进行排序的方法
Mar 13 #PHP
Laravel多用户认证系统示例详解
Mar 13 #PHP
PHP简单实现防止SQL注入的方法
Mar 13 #PHP
PHP+JS实现的实时搜索提示功能
Mar 13 #PHP
PHP实现的简单路由和类自动加载功能
Mar 13 #PHP
You might like
PHP遍历数组的几种方法
2012/03/22 PHP
Yii框架上传图片用法总结
2016/03/28 PHP
Jquery升级新版本后选择器的语法问题
2010/06/02 Javascript
TimergliderJS 一个基于jQuery的时间轴插件
2011/12/07 Javascript
判断对象是否Window的实现代码
2012/01/10 Javascript
javascript获取选中的文本的方法代码
2013/10/30 Javascript
JS 实现BASE64_ENCODE和BASE64_DECODE(实例代码)
2013/11/13 Javascript
JS中表单的使用小结
2014/01/11 Javascript
jquery密码强度校验
2015/12/02 Javascript
JS实现兼容各种浏览器的高级拖动方法完整实例【测试可用】
2016/06/21 Javascript
AngularJS+Bootstrap实现多文件上传与管理
2016/11/08 Javascript
js实现时间轴自动排列效果
2017/03/09 Javascript
JavaScript实现类似淘宝的购物车效果
2017/03/16 Javascript
vue 2.0组件与v-model详解
2017/03/27 Javascript
jquery中each循环的简单回滚操作
2017/05/05 jQuery
javascript+css3开发打气球小游戏完整代码
2017/11/28 Javascript
vue项目中,main.js,App.vue,index.html的调用方法
2018/09/20 Javascript
JavaScript实现的联动菜单特效示例
2019/07/08 Javascript
nodejs实现UDP组播示例方法
2019/11/04 NodeJs
关于Python数据结构中字典的心得
2017/12/04 Python
python 产生token及token验证的方法
2018/12/26 Python
python 寻找离散序列极值点的方法
2019/07/10 Python
使用Python制作缩放自如的圣诞老人(圣诞树)
2019/12/25 Python
Python基于pygame实现单机版五子棋对战
2019/12/26 Python
python+requests接口压力测试500次,查看响应时间的实例
2020/04/30 Python
利用Python中的Xpath实现一个在线汇率转换器
2020/09/09 Python
2014年自我评价
2014/01/04 职场文书
先进个人获奖感言
2014/01/24 职场文书
春节联欢晚会主持词
2014/03/24 职场文书
市委常委会班子党的群众路线教育实践活动整改方案
2014/10/25 职场文书
经理助理岗位职责
2015/02/02 职场文书
结婚仪式主持词
2015/06/29 职场文书
2016年劳模先进事迹材料
2016/02/25 职场文书
股东协议书范本2016
2016/03/21 职场文书
《三国志》赏析
2019/08/27 职场文书
CSS 实现Chrome标签栏的技巧
2021/08/04 HTML / CSS