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读取msn上的用户信息类
Dec 05 PHP
linux iconv方法的使用
Oct 01 PHP
PHP获取数组中某元素的位置及array_keys函数应用
Jan 29 PHP
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
Nov 04 PHP
PHP文件缓存类示例分享
Jan 30 PHP
PHP7之Mongodb API使用详解
Dec 26 PHP
yii2 modal弹窗之ActiveForm ajax表单异步验证
Jun 13 PHP
PHP递归遍历指定文件夹内的文件实现方法
Nov 15 PHP
Yii2-GridView 中让关联字段带搜索和排序功能示例
Jan 21 PHP
PHP中OpenSSL加密问题整理
Dec 14 PHP
PHP实现的解汉诺塔问题算法示例
Aug 06 PHP
laravel Validator ajax返回错误信息的方法
Sep 29 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
在数据量大(超过10万)的情况下
2007/01/15 PHP
php实现的漂亮分页方法
2014/04/17 PHP
64位windows系统下安装Memcache缓存
2015/12/06 PHP
php intval函数用法总结
2019/04/14 PHP
js+css使DIV始终居于屏幕中间 左下 左上 右上 右下的代码集合
2011/03/10 Javascript
jquery日历控件实现方法分享
2014/03/07 Javascript
用IE重起计算机或者关机的示例代码
2014/03/10 Javascript
轻松实现js图片预览功能
2016/01/18 Javascript
基于JavaScript实现动态添加删除表格的行
2016/02/01 Javascript
javascript运算符语法全面概述
2016/07/14 Javascript
JavaScript比较当前时间是否在指定时间段内的方法
2016/08/02 Javascript
基于JS实现仿百度百家主页的轮播图效果
2017/03/06 Javascript
JavaScript 值类型和引用类型的初次研究(推荐)
2017/07/19 Javascript
hammer.js实现图片手势放大效果
2017/08/29 Javascript
详解vue2.0 不同屏幕适配及px与rem转换问题
2018/02/23 Javascript
react中实现搜索结果中关键词高亮显示
2018/07/31 Javascript
解决vue单页路由跳转后scrollTop的问题
2018/09/03 Javascript
详解微信小程序胶囊按钮返回|首页自定义导航栏功能
2019/06/14 Javascript
layui 对table中的数据进行转义的实例
2019/09/12 Javascript
[02:48]DOTA2英雄基础教程 暗夜魔王
2013/12/12 DOTA
以一个投票程序的实例来讲解Python的Django框架使用
2016/02/18 Python
Python 新建文件夹与复制文件夹内所有内容的方法
2018/10/27 Python
python 内置模块详解
2019/01/01 Python
Python selenium抓取虎牙短视频代码实例
2020/03/02 Python
pycharm激活方法到2099年(激活流程)
2020/09/22 Python
Proenza Schouler官方网站:纽约女装和配饰品牌
2019/01/03 全球购物
英国最大的在线亚洲杂货店:Red Rickshaw
2020/03/22 全球购物
Urban Decay官方网站:美国化妆品品牌
2020/06/04 全球购物
拉丁舞学习者的自我评价
2013/10/27 职场文书
师范应届生教师求职信
2013/11/05 职场文书
《我要的是葫芦》教学反思
2014/02/23 职场文书
十八大演讲稿
2014/05/22 职场文书
2014年企业工会工作总结
2014/11/12 职场文书
2015年行政人事工作总结
2015/05/21 职场文书
python字符串的多行输出的实例详解
2021/06/08 Python
Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解
2022/03/03 Python