使用phpqrcode生成二维码

在项目中使用的到了显示二维码,网上搜了一下php主要使用phpqrcode实现。

common公共函数库中

//phpqrcode 二维码 生成,生成后保存到public qrcode文件中
function create_qrcode($value)
{
    vendor("phpqrcode.phpqrcode");
    //$value = 'http://www.baidu.com'; //二维码的值
    //$outfile = ROOT_PATH . "public/phpqrcode/" . time() . '.jpg'; //保存二维码的路径 false=不生成文件
    $level = 'L';容错级别
    $size = 4;//生成图片大小
    $QRcode = new \QRcode();
    ob_start();
    $QRcode->png($value, false, $level, $size, 2);
    $imageString = base64_encode(ob_get_contents());
    ob_end_clean();
    return $imageString;//返回base64编码内容
}
  需要的地方执行函数 $pay_ewm=create_qrcode($qr);

上面的代码是生成一个base64的字符串,在模板页面如下使用就可以显示图片了。

   <img src="https://img-blog.csdnimg.cn/2022010707071040628.png" />

关于QRcode::png方法参数说明:

1.第一个参数 t e x t , 就 是 上 面 代 码 里 的 U R L 网 址 参 数 , 2. 第 二 个 参 数 text,就是上面代码里的URL网址参数, 2.第二个参数 textURL2.outfile默认为否,不生成文件,只将二维码图片返回,否则需要给出存放生成二维码图片的路径
3.第三个参数 l e v e l 默 认 为 L , 这 个 参 数 可 传 递 的 值 分 别 是 L ( Q R E C L E V E L L , 74. 第 四 个 参 数 level默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%),M(QR_ECLEVEL_M,15%),Q(QR_ECLEVEL_Q,25%),H(QR_ECLEVEL_H,30%)。这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比。利用二维维码的容错率,我们可以将头像放置在生成的二维码图片任何区域。 4.第四个参数 levelLL(QRECLEVELL74.size,控制生成图片的大小,默认为4
5.第五个参数 m a r g i n , 控 制 生 成 二 维 码 的 空 白 区 域 大 小 6. 第 六 个 参 数 margin,控制生成二维码的空白区域大小 6.第六个参数 margin6.saveandprint,保存二维码图片并显示出来,$outfile必须传递图片路径。

第二个参数默认是false,方法返回的是二进制的图片流。生成在缓冲区的,在页面输出的时候会从缓冲区送到浏览器。所以在代码中是使用log输出是不会记录在日志中的,也不需要使用echo进行内容输出。所以直接使用base64_encode(QRcode::png)是没有用的。
  这里使用到了ob_start()方法,打开输出缓冲区,所有的输出信息不在直接发送到浏览器,而是保存在输出缓冲区里面。这里就是把生成的图片流从缓冲区保存到内存对象上,使用base64_encode变成编码字符串,通过json返回给页面。
  看一下直接使用QRcode::png返回图片流到浏览器

最后简单说一下ob:
  ob是output buffering的简称,而不是output cache,ob用对了是能对速度有一定的帮助,但是盲目的加上ob函数,只会增加CPU额外的负担。说说ob的基本作用:
1.防止在浏览器有输出之后再使用setcookie,或者header,session_start函数造成的错误。(我本以为最开始说的代码是这样的作用,但后来朋友说不是的),其实这样的用法少用为好,养成良好的代码习惯。
2.捕捉对一些不可获取的函数的输出,比如phpinfo会输出一大堆的HTML,但是我们无法用一个变量例如$info=phpinfo();来捕捉,这时候ob就管用了。
3.对输出的内容进行处理,例如进行gzip压缩,例如进行简繁转换,例如进行一些字符串替换。
4.生成静态文件,其实就是捕捉整页的输出,然后存成文件,经常在生成HTML,或者整页缓存中使用。
  对于刚才说的第三点中的GZIP压缩,可能是很多人想用,却没有真真用上的,加一个ob_gzhandler这个回调函数就可以了。

ob_start(ob_gzhandler);
内容
echo ob_get_contents() ;
ob_end_flush();

作者:懒猫
Q Q:372835766

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值