php生成二维码不保存服务器还有下载功能的实现代码


Posted in PHP onAugust 09, 2018

有个大坑:在phpqrcode类里QRimage::png会重新定义header为header('content-type : img/png')

此header头解析不了html代码,所以在返回完后直接是一张二维码别的代码起不了任何作用,所以要返回完之后再重新声明一下header为header('Content-Type:text/html;charset=utf-8');,我在下边代码中声名过了,标红的就是

1.引入phpqrcode类(php操作二维码类)

2.调用encodePNG方法

3.修改encodePNG方法( 加入ob缓存,返回)base64加密后的图片流

4.将加密后的图片流返回给前端

5.前端通过img标签输出

6.下载功能:超链接直接加上 download="图片名称"

调用phpqrcode代码如下

/**
 * 活动二维码生成
 * @param $text 参数$text表示生成二位的的信息文本;
 * @param $outfile 参数$outfile表示是否输出二维码图片 文件,默认否;
 * @param string $level 参数$level表示容错率,也就是有被覆盖的区域还能识别,分别是 L(QR_ECLEVEL_L,7%),M(QR_ECLEVEL_M,15%),Q(QR_ECLEVEL_Q,25%),H(QR_ECLEVEL_H,30%);
 * @param int $size 参数$size表示生成图片大小,默认是3;参数$margin表示二维码周围边框空白区域间距值;
 * @param int $margin
 * @param bool $saveandprint 参数$saveandprint表示是否保存二维码并显示。
 */
include_once(ROOT_PATH . '/protected/components/phpqrcode.php');
$link = LinkUrlHelper::getUrl(Yii::app()->user->eid,'ACTIVE_DETAIL',$id);
$h5Url = $link['h5'];
$baseImg = QRimage::encodePNG($h5Url,false);
$this->renderPartial('training_code',['img'=>$baseImg]);

修改后的encodePNG方法

public function encodePNG($intext, $outfile = false,$saveandprint=false) 
{
  try {
    ob_start();
    $tab = $this->encode($intext);
    $err = ob_get_contents();
    ob_end_clean();
    if ($err != '')
      QRtools::log($outfile, $err);
    $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin));
    ob_start();//开启ob缓存
    QRimage::png($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint);
    $imageString = base64_encode(ob_get_contents());//将图片流存入缓存并加密赋值给变量
    ob_end_clean();//清楚ob缓存
    header('Content-Type:text/html;charset=utf-8');// QRimage::png 会覆盖此header头,所以要重新声明一下,否则解析不了html代码。
    return "data:image/png;base64,".$imageString;//返回拼接好的串
  } catch (Exception $e) {
    QRtools::log($outfile, $e->getMessage());
  }
}

总结

以上所述是小编给大家介绍的php生成二维码不保存服务器还有下载功能的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
Mar 13 PHP
php入门学习知识点四 PHP正则表达式基本应用
Jul 14 PHP
php操作JSON格式数据的实现代码
Dec 24 PHP
thinkphp使用phpmailer发送邮件的方法
Nov 24 PHP
Laravel 5.0 发布 新版本特性详解
Feb 10 PHP
php获取远程文件大小
Oct 20 PHP
PHP读取大文件的多种方法介绍
Apr 04 PHP
让你的PHP7更快之Hugepage用法分析
May 31 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
Oct 28 PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
Dec 05 PHP
PHP 应用容器化以及部署方法
Feb 12 PHP
PHP常见数组排序方法小结
Aug 20 PHP
PHP命令Command模式用法实例分析
Aug 08 #PHP
PHP耦合设计模式实例分析
Aug 08 #PHP
thinkPHP框架整合tcpdf插件操作示例
Aug 07 #PHP
php实现往pdf中加数字签名操作示例【附源码下载】
Aug 07 #PHP
php使用环形链表解决约瑟夫问题完整示例
Aug 07 #PHP
postman的安装与使用方法(模拟Get和Post请求)
Aug 06 #PHP
PHP实现的解汉诺塔问题算法示例
Aug 06 #PHP
You might like
编写PHP的安全策略
2006/10/09 PHP
thinkphp下MySQL数据库读写分离代码剖析
2017/04/18 PHP
PHP完全二叉树定义与实现方法示例
2017/10/09 PHP
JavaScript XML操作 封装类
2009/07/01 Javascript
动态创建样式表在各浏览器中的差异测试代码
2011/09/13 Javascript
javascript中的缓动效果实现程序
2012/12/29 Javascript
jquery、js操作checkbox全选反选
2014/03/12 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
2016/01/21 Javascript
微信小程序 底部导航栏目开发资料
2016/12/05 Javascript
Bootstarp 基础教程之表单部分实例代码
2017/02/03 Javascript
JS仿Base.js实现的继承示例
2017/04/07 Javascript
nodejs mysql 实现分页的方法
2017/06/06 NodeJs
5分钟打造简易高效的webpack常用配置
2017/07/04 Javascript
聊聊那些使用前端Javascript实现的机器学习类库
2017/09/18 Javascript
jQuery基于cookie实现换肤功能实例
2017/10/14 jQuery
mpvue写一个CPASS小程序的示例
2018/09/04 Javascript
你应该了解的JavaScript Array.map()五种用途小结
2018/11/14 Javascript
mock.js实现模拟生成假数据功能示例
2019/01/15 Javascript
ES6的异步终极解决方案分享
2019/07/11 Javascript
改进 JavaScript 和 Rust 的互操作性并深入认识 wasm-bindgen 组件
2019/07/13 Javascript
python 实现网上商城,转账,存取款等功能的信用卡系统
2016/07/15 Python
python学习教程之使用py2exe打包
2017/09/24 Python
python交互式图形编程实例(一)
2017/11/17 Python
python构建深度神经网络(续)
2018/03/10 Python
python获取当前目录路径和上级路径的实例
2018/04/26 Python
python使用thrift教程的方法示例
2019/03/21 Python
在Python中append以及extend返回None的例子
2019/07/20 Python
python打印直角三角形与等腰三角形实例代码
2019/10/20 Python
Python Mock模块原理及使用方法详解
2020/07/07 Python
SmartBuyGlasses荷兰:购买太阳镜和眼镜
2020/03/16 全球购物
有abstract方法的类一定要用abstract修饰吗
2016/03/14 面试题
感谢信怎么写
2015/01/21 职场文书
红高粱观后感
2015/06/10 职场文书
宣传稿格式范文
2015/07/23 职场文书
2015年科普工作总结
2015/07/23 职场文书
redis连接被拒绝的解决方案
2021/04/12 Redis