phpqrcode 生成的图片转为 base64 格式输出

项目中需要用到phpqrcode生成二维码,但是通过QRcode::png()生成的是显示输出当前的照片流,这样就不适用于列表显示多个二维码的需求了。网上也有相关的一些解决方案:通过把照片流缓存,然后进行base64编码。

第一步:注释phpqrcode类文件的Qrimage的png方法的header头图片格式发送

class QRimage {
    
        //----------------------------------------------------------------------
        public static function png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE) 
        {
            $image = self::image($frame, $pixelPerPoint, $outerFrame);
            
            if ($filename === false) {
                // Header("Content-type: image/png");
                ImagePng($image);
            } else {
                if($saveandprint===TRUE){
                    ImagePng($image, $filename);
                    header("Content-type: image/png");
                    ImagePng($image);
                }else{
                    ImagePng($image, $filename);
                }
            }
            
            ImageDestroy($image);
        }

第二步:生成base64二维码

public function create_qrcode($text='no text')
{
    include_once(env('root_path')."/extend/qrcode/phpqrcode.php");//加载qrcode类
    //开启输出缓冲区
    ob_start();
    $Qrcode = new QRcode();
    $Qrcode::png($text,false,'H','6','2');
    $image_url = base64_encode(ob_get_contents()); //获取缓冲区图片转base64
    if(ob_get_length()) ob_end_clean(); //释放缓冲区并关闭缓冲区
    $base64 = "data:image/png;base64,".$image_url;
    return $base64;
}