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 expects parameter 1 to be resource, array given 错误
Mar 23 PHP
分享一个PHP数据流应用的简单例子
Jun 01 PHP
php代码中使用换行及(\n或\r\n和br)的应用
Feb 02 PHP
初识PHP
Sep 28 PHP
thinkPHP实现瀑布流的方法
Nov 29 PHP
php使用COPY函数更新配置文件的方法
Jun 18 PHP
在WordPress中使用wp-cron插件来设置定时任务
Dec 10 PHP
Yii清理缓存的方法
Jan 06 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
Jun 06 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
Jun 20 PHP
Laravel使用支付宝进行支付的示例代码
Aug 16 PHP
php+mysql开发中的经验与常识小结
Mar 25 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设计模式之观察者模式的应用详解
2013/05/21 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
2017/09/30 PHP
js 目录列举函数
2008/11/06 Javascript
Javascript 读书笔记索引贴
2010/01/11 Javascript
一个JQuery写的点击上下滚动的小例子
2011/08/27 Javascript
jquery入门—访问DOM对象方法
2013/01/07 Javascript
JS关键字球状旋转效果的实例代码
2013/11/29 Javascript
为什么JS中eval处理JSON数据要加括号
2015/04/13 Javascript
javascript下拉列表菜单的实现方法
2015/11/18 Javascript
jQuery延迟执行的实现方法
2016/12/21 Javascript
详解使用Next.js构建服务端渲染应用
2018/07/10 Javascript
微信小程序保存多张图片的实现方法
2019/03/05 Javascript
vue生命周期的探索
2019/04/03 Javascript
微信小程序 WXML节点信息查询详解
2019/07/29 Javascript
小程序实现上下切换位置
2020/11/16 Javascript
[51:30]OG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/30 DOTA
用于统计项目中代码总行数的Python脚本分享
2015/04/21 Python
python多进程和多线程究竟谁更快(详解)
2017/05/29 Python
python3+PyQt5+Qt Designer实现扩展对话框
2018/04/20 Python
Python中的十大图像处理工具(小结)
2019/06/10 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
Python实现一个优先级队列的方法
2020/07/31 Python
顶丰TOPPIK台湾官网:增发纤维假发,告别秃发困扰
2018/06/13 全球购物
英国手机零售商:Metrofone
2019/03/18 全球购物
存储过程和函数的区别
2013/05/28 面试题
大学生自我评价怎样写好
2013/10/23 职场文书
材料采购员岗位职责
2013/12/17 职场文书
国培教师自我鉴定
2014/02/12 职场文书
函授毕业生自我鉴定范文
2014/03/25 职场文书
幼儿教师演讲稿
2014/05/06 职场文书
汽车维修专业自荐书
2014/05/26 职场文书
汽车4S店前台接待岗位职责
2015/04/03 职场文书
微观世界观后感
2015/06/10 职场文书
冰雪公主观后感
2015/06/16 职场文书
解决python存数据库速度太慢的问题
2021/04/23 Python
Python连接Postgres/Mysql/Mongo数据库基本操作大全
2021/06/29 Python