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+AJAX传送中文会导致乱码的问题的解决方法
Sep 08 PHP
php 移除数组重复元素的一点说明
Nov 27 PHP
建站常用13种PHP开源CMS比较
Aug 23 PHP
PHP STRING 陷阱原理说明
Jul 24 PHP
用PHP提取中英文词语以及数字的首字母的方法介绍
Apr 23 PHP
Laravel 5.0 发布 新版本特性详解
Feb 10 PHP
codeigniter实现get分页的方法
Jul 10 PHP
php页面,mysql数据库转utf-8乱码,utf-8编码问题总结
Aug 27 PHP
利用PHP命令行模式采集股票趋势信息
Aug 09 PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
Dec 15 PHP
PHP4和PHP5版本下解析XML文档的操作方法实例分析
May 20 PHP
php和redis实现秒杀活动的流程
Jul 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
全国FM电台频率大全 - 15 山东省
2020/03/11 无线电
PHP设计模式 注册表模式(多个类的注册)
2012/02/05 PHP
php下拉选项的批量操作的实现代码
2013/10/14 PHP
PHP编程风格规范分享
2014/01/15 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
javascript学习基础笔记之DOM对象操作
2011/11/03 Javascript
JQuery表格内容过滤的实现方法
2013/07/05 Javascript
javascript数组快速打乱重排的方法
2014/01/02 Javascript
Nodejs实现的一个静态服务器实例
2014/12/06 NodeJs
JavaScript基础函数整理汇总
2015/01/30 Javascript
javascript实现继承的简单实例
2015/07/26 Javascript
详解JavaScript数组的操作大全
2015/10/19 Javascript
js防阻塞加载的实现方法
2016/09/09 Javascript
用AngularJS来实现监察表单按钮的禁用效果
2016/11/02 Javascript
JS严格模式知识点总结
2018/02/27 Javascript
自定义Vue组件打包、发布到npm及使用教程
2019/05/22 Javascript
简单了解vue 插值表达式Mustache
2020/07/22 Javascript
解决vue项目中遇到 Cannot find module ‘chalk‘ 报错的问题
2020/11/05 Javascript
Python使用requests发送POST请求实例代码
2018/01/25 Python
解决python nohup linux 后台运行输出的问题
2018/05/11 Python
python的几种矩阵相乘的公式详解
2019/07/10 Python
Python异常继承关系和自定义异常实现代码实例
2020/02/20 Python
Python3爬虫带上cookie的实例代码
2020/07/28 Python
THE OUTNET美国官网:国际设计师品牌折扣网站
2017/03/07 全球购物
京东国际站:JOYBUY
2017/11/23 全球购物
Spongelle官网:美国的创意护肤洗护品牌
2019/05/15 全球购物
中学教师培训制度
2014/01/31 职场文书
个人授权委托书
2014/04/03 职场文书
初中作文评语大全
2014/04/23 职场文书
青春无悔演讲稿
2014/05/08 职场文书
个人欠款担保书
2014/05/20 职场文书
人事主管岗位职责说明书
2014/07/30 职场文书
政风行风评议工作总结
2014/10/21 职场文书
聚众斗殴罪辩护词
2015/05/21 职场文书
小学教师读书笔记
2015/07/01 职场文书
java设计模式--原型模式详解
2021/07/21 Java/Android