PHP二维码生成

141 阅读1分钟

本代码实测有效,该代码是fastadmin语法,一些获取路径如果不对,请根据自己框架修改。

1.先引入phpqrcode

2.直接复制代码

  public function create_qrcode($user_id){

    $urlstr = config('site.qrcode_url').'?p_userid='.$user_id; //二维码存入内容
    Vendor('phpqrcode.phpqrcode');	//引入phpqrcode
    //生成二维码图片
    $errorCorrectionLevel = 'L';	//容错级别
    $matrixPointSize = 5;			//生成图片大小
    $img = mt_rand(0,9999).uniqid().mt_rand(0,9999).mt_rand(0,9999).'.png';
    $file_path = 'qrcode/'.date('Ymd').'/';
    $path= ROOT_PATH .'public/uploads/'.$file_path;
    if(!file_exists($path)){
        //检查是否有该文件夹,如果没有就创建,并给予最高权限
        mkdir($path,0777,true);
    }
    $filename = $path.$img;
    \QRcode::png($urlstr,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    $QR = $filename;				//已经生成的原始二维码图片文件
    $QR = imagecreatefromstring(file_get_contents($QR));
    //保存图片,销毁图形,释放内存
    if (!file_exists($filename)) {
        imagepng($QR, $filename);
        imagedestroy($QR);
    } else {
        imagedestroy($QR);
    }

    return '/uploads/'.$file_path.$img;
}

phpqrcode包需要自行去官网下载一下
欢迎各位小伙伴来我的QQ交流群一起学习 :842167453

参考 blog.csdn.net/weixin_4342…

这里是我用hyperf3.1 php版本8.1的步骤, composer require endroid/qr-code:5.0.0 --ignore-platform-reqs 这个安装可以忽略冲突

<?php
namespace App\Common;


use Endroid\QrCode\QrCode;
use Endroid\QrCode\Writer\PngWriter;
use Endroid\QrCode\Encoding\Encoding;
use Endroid\QrCode\ErrorCorrectionLevel;
use Endroid\QrCode\Color\Color;
use Endroid\QrCode\Logo\Logo;
class QrcodeCommon {


    public static function generateQrCodeBase64($data)
    {
        $qrCode = QrCode::create($data)
            ->setEncoding(new Encoding('UTF-8'))
            ->setErrorCorrectionLevel(ErrorCorrectionLevel::High)
            ->setSize(300)
            ->setMargin(10)
            ->setForegroundColor(new Color(...[0, 0, 0]))
            ->setBackgroundColor(new Color(255, 255, 255));
        // 生成 PNG 格式的 Base64
        $writer = new PngWriter();
        $result = $writer->write($qrCode);
        return 'data:image/png;base64,' . base64_encode($result->getString());
    }

}