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 相关文章推荐
发布一个迷你php+AJAX聊天程序[聊天室]提供下载
Jul 21 PHP
php获取mysql版本的几种方法小结
Mar 25 PHP
一步一步学习PHP(3) php 函数
Feb 15 PHP
PHP之数组学习
May 29 PHP
php中根据变量的类型 选择echo或dump
Jul 05 PHP
php类常量的使用详解
Jun 08 PHP
php文件上传你必须知道的几点
Oct 20 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
Nov 17 PHP
PDO::errorCode讲解
Jan 28 PHP
PHP+Apache实现二级域名之间共享cookie的方法
Jul 24 PHP
Yii框架的redis命令使用方法简单示例
Oct 15 PHP
PHP7 foreach() 函数修改
Mar 09 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静态方法及普通方法的区别
2016/10/04 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
键盘控制事件应用教程大全
2006/11/24 Javascript
精通JavaScript 纠正 cleanWhitespace函数
2010/03/11 Javascript
JavaScript Array Flatten 与递归使用介绍
2011/10/30 Javascript
JS仿淘宝实现的简单滑动门效果代码
2015/10/14 Javascript
AngularJS基础 ng-copy 指令实例代码
2016/08/01 Javascript
jQuery实现简洁的轮播图效果实例
2016/09/07 Javascript
原生js实现秒表计时器功能
2017/02/16 Javascript
详解angularjs 关于ui-router分层使用
2017/06/12 Javascript
jQuery使用ajax_动力节点Java学院整理
2017/07/05 jQuery
javascript 中事件冒泡和事件捕获机制的详解
2017/09/01 Javascript
利用javascript如何随机生成一定位数的密码
2017/09/22 Javascript
vue2.0 如何把子组件的数据传给父组件(推荐)
2018/01/15 Javascript
基于node打包可执行文件工具_Pkg使用心得分享
2018/01/24 Javascript
Vue2.0实现组件数据的双向绑定问题
2018/03/06 Javascript
vue + vuex todolist的实现示例代码
2018/03/09 Javascript
javascript实现弹幕墙效果
2019/11/28 Javascript
一条命令解决mac版本python IDLE不能输入中文问题
2018/05/15 Python
解决python3 pika之连接断开的问题
2018/12/18 Python
celery4+django2定时任务的实现代码
2018/12/23 Python
python网络爬虫 Scrapy中selenium用法详解
2019/09/28 Python
python打印异常信息的两种实现方式
2019/12/24 Python
python 爬取B站原视频的实例代码
2020/09/09 Python
Django 权限管理(permissions)与用户组(group)详解
2020/11/30 Python
纯CSS绘制漂亮的圆形图案效果
2014/05/07 HTML / CSS
南非最受欢迎的时尚品牌:MRP
2016/09/18 全球购物
vivo智能手机官方商城:vivo
2016/09/22 全球购物
美国首屈一指的高品质珠宝设计师和零售商:Allurez
2018/01/23 全球购物
JD Sports瑞典:英国领先的运动时尚商店
2018/01/28 全球购物
什么是反射?如何实现反射?
2016/07/25 面试题
酒店管理毕业生自荐信
2013/10/24 职场文书
民主评议政风行风活动心得体会
2014/10/29 职场文书
公务员检讨书
2014/11/01 职场文书
vue组件的路由高亮问题解决方法
2021/05/11 Vue.js
5行Python代码实现一键批量扣图
2021/06/29 Python