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;
}