本代码实测有效,该代码是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
这里是我用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());
}
}