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+MySQL 手工注入语句大全 推荐
Oct 30 PHP
php UTF8 文件的签名问题
Oct 30 PHP
PHP将DateTime对象转化为友好时间显示的实现代码
Sep 20 PHP
360通用php防护代码(使用操作详解)
Jun 18 PHP
163的邮件用phpmailer发送(实例详解)
Jun 24 PHP
PHP mkdir()无写权限的问题解决方法
Jun 19 PHP
ThinkPHP3.2.2的插件控制器功能简述
Jul 09 PHP
php输出xml必须header的解决方法
Oct 17 PHP
php将字符串转换成16进制的方法
Mar 17 PHP
PHP读取并输出XML文件数据的简单实现方法
Dec 22 PHP
PHP实现找出链表中环的入口节点
Jan 16 PHP
PHP mkdir创建文件夹实现方法解析
Nov 13 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压缩html网页代码(清除空格,换行符,制表符,注释标记)
2012/04/02 PHP
php加密解密函数authcode的用法详细解析
2013/10/28 PHP
php header功能的使用
2013/10/28 PHP
PHP弹出提示框并跳转到新页面即重定向到新页面
2014/01/24 PHP
php显示指定目录下子目录的方法
2015/03/20 PHP
详解Yii2 rules 的验证规则
2016/12/02 PHP
解决laravel(5.5)访问public报错的问题
2019/10/12 PHP
PHP数组实际占用内存大小原理解析
2020/12/11 PHP
javascript判断iphone/android手机横竖屏模式的函数
2011/12/20 Javascript
jquery判断RadioButtonList和RadioButton中是否有选中项示例
2013/09/29 Javascript
JavaScript判断用户是否对表单进行了修改的方法
2015/03/18 Javascript
浅谈javascript属性onresize
2015/04/20 Javascript
JavaScript如何获取数组最大值和最小值
2015/11/18 Javascript
Bootstrap作品展示站点实战项目2
2016/10/14 Javascript
jquery easyui validatebox remote的使用详解
2016/11/09 Javascript
微信小程序数字滚动插件使用详解
2018/02/02 Javascript
vue判断input输入内容全是空格的方法
2018/03/02 Javascript
详解vue填坑之解决部分浏览器不支持pushState方法
2018/07/12 Javascript
Async/Await替代Promise的6个理由
2019/06/15 Javascript
JS面向对象编程基础篇(三) 继承操作实例详解
2020/03/03 Javascript
使用JS实现鼠标放上图片进行放大离开实现缩小功能
2021/01/27 Javascript
取numpy数组的某几行某几列方法
2018/04/03 Python
Django实现文件上传下载
2019/10/06 Python
Django实现基于类的分页功能
2019/10/31 Python
Crocs美国官方网站:卡骆驰洞洞鞋
2017/08/04 全球购物
德国、奥地利和瑞士最大的旅行和度假门户网站:HolidayCheck
2019/11/14 全球购物
医学生自荐信
2013/12/03 职场文书
专业幼师实习生自我鉴定范文
2013/12/08 职场文书
纠纷协议书
2014/04/16 职场文书
财务内勤岗位职责
2014/04/17 职场文书
中秋节活动总结
2014/08/29 职场文书
工作证明格式及范本
2014/09/12 职场文书
2016年教师寒假学习心得体会
2015/10/09 职场文书
sqlserver2017共享功能目录路径不可改的解决方法
2021/04/16 SQL Server
使用Djongo模块在Django中使用MongoDB数据库
2021/06/20 Python
SpringDataJPA实体类关系映射配置方式
2021/12/06 Java/Android