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 相关文章推荐
discuz7 phpMysql操作类
Jun 21 PHP
PHP 判断变量类型实现代码
Oct 23 PHP
PHP var_dump遍历对象属性的函数与应用代码
Jun 04 PHP
php判断字符串在另一个字符串位置的方法
Feb 27 PHP
ThinkPHP页面跳转success与error方法概述
Jun 25 PHP
使用php的HTTP请求的库Requests实现美女图片墙
Feb 22 PHP
WIN8.1下搭建PHP5.6环境
Apr 29 PHP
php根据生日计算年龄的方法
Jul 13 PHP
PHP MVC框架路由学习笔记
Mar 02 PHP
php封装json通信接口详解及实例
Mar 07 PHP
PHP正则匹配到2个字符串之间的内容方法
Dec 24 PHP
php设计模式之建造器模式分析【星际争霸游戏案例】
Jan 23 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小技巧 把数组的键和值交换形成了新的数组,查找值取得键
2011/06/02 PHP
php框架CodeIgniter主从数据库配置方法分析
2018/05/25 PHP
表单JS弹出填写提示效果代码
2011/04/16 Javascript
更优雅的事件触发兼容
2011/10/24 Javascript
动态加载js和css(外部文件)
2013/04/17 Javascript
js实现目录定位正文示例
2013/11/14 Javascript
js简单的弹出框有关闭按钮
2014/05/05 Javascript
JS实现的用来对比两个用指定分隔符分割的字符串是否相同
2014/09/19 Javascript
JS获取时间的方法
2015/01/21 Javascript
基于JavaScript实现单选框下拉菜单添加文件效果
2016/06/26 Javascript
JS实现根据文件字节数返回文件大小的方法
2016/08/02 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
2016/11/04 Javascript
js实时获取窗口大小变化的实例代码
2016/11/18 Javascript
Angularjs自定义指令实现分页插件(DEMO)
2017/09/16 Javascript
npm的lock机制解析
2019/06/20 Javascript
jQuery实现倒计时功能完整示例
2020/06/01 jQuery
在vue中实现某一些路由页面隐藏导航栏的功能操作
2020/09/21 Javascript
jQuery实现简单评论区功能
2020/10/26 jQuery
[03:18]【TI9纪实】社区大触GL与木木
2019/08/25 DOTA
浅谈编码,解码,乱码的问题
2016/12/30 Python
深入理解Python爬虫代理池服务
2018/02/28 Python
matplotlib subplots 调整子图间矩的实例
2018/05/25 Python
django manage.py扩展自定义命令方法
2018/05/27 Python
使用python验证代理ip是否可用的实现方法
2018/07/25 Python
Python3 max()函数基础用法
2019/02/19 Python
python多线程抽象编程模型详解
2019/03/20 Python
python实现自动化上线脚本的示例
2019/07/01 Python
python高阶函数map()和reduce()实例解析
2020/03/16 Python
来自全球大都市的高级街头服饰:Pegador
2018/01/03 全球购物
报关报检委托书
2014/04/08 职场文书
护士工作失误检讨书
2014/09/14 职场文书
卫校毕业生自我鉴定
2014/09/28 职场文书
英语导游欢迎词
2015/09/30 职场文书
母婴行业实体、电商模式全面解析
2019/08/01 职场文书
解决Django transaction进行事务管理踩过的坑
2021/04/24 Python
Oracle 触发器trigger使用案例
2022/02/24 Oracle