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 相关文章推荐
用PHP和ACCESS写聊天室(三)
Oct 09 PHP
PHP5.3的垃圾回收机制(动态存储分配方案)深入理解
Dec 10 PHP
php中判断数组是一维,二维,还是多维的解决方法
May 04 PHP
CodeIgniter生成网站sitemap地图的方法
Nov 13 PHP
php中convert_uuencode()与convert_uuencode函数用法实例
Nov 22 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
May 11 PHP
php基于curl扩展制作跨平台的restfule 接口
May 11 PHP
php生成过去100年下拉列表的方法
Jul 20 PHP
php去掉文件前几行的方法
Jul 29 PHP
全面解读PHP的Yii框架中的日志功能
Mar 17 PHP
PHP中利用sleep函数实现定时执行功能实现代码
Aug 25 PHP
Laravel 模型使用软删除-左连接查询-表起别名示例
Oct 24 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准确取得服务器IP地址的方法
2015/06/02 PHP
PHP安全下载文件的方法
2016/04/07 PHP
PHP生成图片缩略图类示例
2017/01/12 PHP
JS模拟多线程
2007/02/07 Javascript
defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
2010/04/27 Javascript
js escape,unescape解决中文乱码问题的方法
2010/05/26 Javascript
jquery提交form表单时禁止重复提交的方法
2014/02/13 Javascript
js实现商城星星评分的效果
2015/12/29 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
2016/06/03 Javascript
KnockoutJS 3.X API 第四章之表单value绑定
2016/10/10 Javascript
JAVA面试题 static关键字详解
2019/07/16 Javascript
Python with用法实例
2015/04/14 Python
python安装以及IDE的配置教程
2015/04/29 Python
Python采用Django制作简易的知乎日报API
2016/08/03 Python
Django 2.0版本的新特性抢先看!
2018/01/05 Python
Python实现将doc转化pdf格式文档的方法
2018/01/19 Python
Java与Python两大幸存者谁更胜一筹呢
2018/04/12 Python
python实现对csv文件的列的内容读取
2018/07/04 Python
python生成1行四列全2矩阵的方法
2018/08/04 Python
python 列表中[ ]中冒号‘:’的作用
2019/04/30 Python
python定时复制远程文件夹中所有文件
2019/04/30 Python
python中把元组转换为namedtuple方法
2020/12/09 Python
分享一个python的aes加密代码
2020/12/22 Python
印尼第一大家居、生活和家具电子商务:Ruparupa
2019/11/25 全球购物
护理自荐信范文
2013/10/05 职场文书
办公室文员工作职责
2014/01/31 职场文书
会计电算化专业自荐信
2014/03/15 职场文书
感恩父母的演讲稿
2014/05/06 职场文书
企业安全生产月活动总结
2014/07/05 职场文书
小学毕业典礼演讲稿
2014/09/09 职场文书
保送生自荐信范文
2015/03/26 职场文书
2015年公司工作总结
2015/04/25 职场文书
小人国观后感
2015/06/11 职场文书
革命电影观后感
2015/06/18 职场文书
Python集合的基础操作
2021/11/01 Python
CSS SandBox应用场景及常见问题
2022/06/25 HTML / CSS