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 相关文章推荐
防止MySQL注入或HTML表单滥用的PHP程序
Jan 21 PHP
php curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)
Apr 07 PHP
php中socket通信机制实例详解
Jan 03 PHP
php上传文件问题汇总
Jan 30 PHP
PHP实现在线阅读PDF文件的方法
Jun 17 PHP
分享PHP函数实现数字与文字分页代码
Jul 28 PHP
WordPress开发中自定义菜单的相关PHP函数使用简介
Jan 05 PHP
php实现三级级联下拉框
Apr 17 PHP
php无限级分类实现方法分析
Oct 19 PHP
Zend Framework动作控制器用法示例
Dec 09 PHP
PHP多进程之pcntl_fork的实例详解
Oct 15 PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
Apr 09 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中在数据库中保存Checkbox数据(1)
2006/10/09 PHP
php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
2011/11/02 PHP
PHP删除非空目录的函数代码小结
2013/02/28 PHP
php读取图片内容并输出到浏览器的实现代码
2013/08/08 PHP
Yii框架的路由配置方法分析
2019/09/09 PHP
如何在PHP中使用AES加密算法加密数据
2020/06/24 PHP
使用JQuery和s3captche实现一个水果名字的验证
2009/08/14 Javascript
判断一个对象是否为jquery对象的方法
2014/03/12 Javascript
js改变鼠标的形状和样式的方法
2014/03/31 Javascript
node.js中的fs.fchmod方法使用说明
2014/12/16 Javascript
jQuery源码解读之addClass()方法分析
2015/02/20 Javascript
jscript读写二进制文件的方法
2015/04/22 Javascript
javascript中的Function.prototye.bind
2015/06/25 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
2015/08/25 Javascript
nodejs实现bigpipe异步加载页面方案
2016/01/26 NodeJs
使用jQuery制作浮动工具栏的实例分享
2016/05/13 Javascript
JS 拦截全局ajax请求实例解析
2016/11/29 Javascript
nodejs 图解express+supervisor+ejs的用法(推荐)
2017/09/08 NodeJs
微信小程序基于Taro的分享图片功能实践详解
2019/07/12 Javascript
微信公众号H5之微信分享常见错误和问题(小结)
2019/11/14 Javascript
vue+springboot图片上传和显示的示例代码
2020/02/14 Javascript
Python程序员开发中常犯的10个错误
2014/07/07 Python
python中实现定制类的特殊方法总结
2014/09/28 Python
python函数局部变量用法实例分析
2015/08/04 Python
日常整理python执行系统命令的常见方法(全)
2015/10/22 Python
Django REST为文件属性输出完整URL的方法
2017/12/18 Python
python使用PyQt5的简单方法
2019/02/27 Python
对django后台admin下拉框进行过滤的实例
2019/07/26 Python
Django中使用haystack+whoosh实现搜索功能
2019/10/08 Python
python3安装OCR识别库tesserocr过程图解
2020/04/02 Python
英国家用电器折扣网站:Electrical Discount UK
2018/09/17 全球购物
瑞典度假品牌:OAS
2019/05/28 全球购物
资产经营总监岗位职责范文
2013/12/01 职场文书
《阳光》教学反思
2014/02/23 职场文书
电影复兴之路观后感
2015/06/02 职场文书
详解ZABBIX监控ESXI主机的问题
2022/06/21 Servers