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发电子邮件
Oct 09 PHP
php创建多级目录代码
Jun 05 PHP
PHP中常用数组处理方法实例分析
Aug 30 PHP
php下通过伪造http头破解防盗链的代码
Jul 03 PHP
使用php计算排列组合的方法
Nov 13 PHP
php输入流php://input使用示例(php发送图片流到服务器)
Dec 25 PHP
PHP以mysqli方式连接类完整代码实例
Jul 15 PHP
php无限极分类递归排序实现方法
Nov 11 PHP
PHP中利用sleep函数实现定时执行功能实现代码
Aug 25 PHP
用PHP的socket实现客户端到服务端的通信实例详解
Feb 04 PHP
PHP异常处理定义与使用方法分析
Jul 25 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
Oct 13 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
php5.5新数组函数array_column使用
2013/07/08 PHP
PHP对XML内容进行修改和删除实例代码
2016/10/26 PHP
php工具型代码之印章抠图
2018/07/18 PHP
菜单效果
2006/10/14 Javascript
De facto standard 世界上不可思议的事实标准
2010/08/29 Javascript
js动态为代码着色显示行号
2013/05/29 Javascript
JavaScript中instanceof运算符的用法总结
2013/11/19 Javascript
基于BootStrap的图片轮播效果展示实例代码
2016/05/23 Javascript
拥Bootstrap入怀——导航栏篇
2016/05/30 Javascript
jQuery设置图片等比例缩小的方法
2017/04/29 jQuery
深入探究node之Transform
2017/07/20 Javascript
Vue Element使用icon图标教程详解(第三方)
2018/02/07 Javascript
webpack项目调试以及独立打包配置文件的方法
2018/02/28 Javascript
vue2实现搜索结果中的搜索关键字高亮的代码
2018/08/29 Javascript
javascrit中undefined和null的区别详解
2019/04/07 Javascript
vue.js中ref和$refs的使用及示例讲解
2019/08/14 Javascript
js+springMVC 提交数组数据到后台的实例
2019/09/21 Javascript
微信小程序后端实现授权登录
2020/02/24 Javascript
nuxt+axios实现打包后动态修改请求地址的方法
2020/04/22 Javascript
jQuery实现增删改查
2020/12/22 jQuery
完美解决Python2操作中文名文件乱码的问题
2017/01/04 Python
pygame实现非图片按钮效果
2019/10/29 Python
python发qq消息轰炸虐狗好友思路详解(完整代码)
2020/02/15 Python
python中rb含义理解
2020/06/18 Python
python获取时间戳的实现示例(10位和13位)
2020/09/23 Python
详解pandas赋值失败问题解决
2020/11/29 Python
澳洲的服装老品牌:SABA
2018/02/06 全球购物
高分子材料与工程专业推荐信
2013/12/01 职场文书
2014元旦晚会策划方案
2014/02/19 职场文书
大学生社团活动总结
2014/04/26 职场文书
技术经济专业求职信
2014/09/03 职场文书
学风建设主题班会
2015/08/17 职场文书
电力培训学习心得体会
2016/01/11 职场文书
2016教师读书思廉心得体会
2016/01/23 职场文书
sqlserver2017共享功能目录路径不可改的解决方法
2021/04/16 SQL Server
golang三种设计模式之简单工厂、方法工厂和抽象工厂
2022/04/10 Golang