美文网首页
使用phpqrcode生成二维码

使用phpqrcode生成二维码

作者: 可乐爱上咖啡 | 来源:发表于2016-07-23 23:57 被阅读10595次

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

            $data = 'www.baidu.com'; 
            $level = 'L';// 纠错级别:L、M、Q、H
            $size = 6;// 点的大小:1到10,用于手机端4就可以了
            
            include EXTEND_PATH.'org/phpqrcode/phpqrcode.php';
            $QRcode = new \QRcode();
            ob_start();
            $QRcode->png($data,false,$level,$size);
            $imageString = base64_encode(ob_get_contents());
            ob_end_clean();
            //$path=ROOT_PATH.'public/static/images/qrcode/';
            //$QRcode->png($data,$path.$fileName,$level,$size);// 生成本地图片
            return $imageString;
    

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

    <img src="data:image/png;base64,这里是base64编码内容" />
    

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

    1.第一个参数$text,就是上面代码里的URL网址参数,
    2.第二个参数$outfile默认为否,不生成文件,只将二维码图片返回,否则需要给出存放生成二维码图片的路径
    3.第三个参数$level默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%),M(QR_ECLEVEL_M,15%),Q(QR_ECLEVEL_Q,25%),H(QR_ECLEVEL_H,30%)。这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比。利用二维维码的容错率,我们可以将头像放置在生成的二维码图片任何区域。
    4.第四个参数$size,控制生成图片的大小,默认为4
    5.第五个参数$margin,控制生成二维码的空白区域大小
    6.第六个参数$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();
    

    相关文章

      网友评论

          本文标题:使用phpqrcode生成二维码

          本文链接:https://www.haomeiwen.com/subject/ciywjttx.html