<?php
namespace app\common\utils;
use Endroid\QrCode\Encoding\Encoding;
use Endroid\QrCode\QrCode;
use Endroid\QrCode\Writer\PngWriter;
class GenerateQrcode
{
//二维码工具类
//生成一个二维码
public function generateQrcode($data)
{
if (empty($data)) {
// 如果没有提供内容,返回错误
return false;
}
$qrCode = QrCode::create($data['code'])
// 内容编码
->setEncoding(new Encoding('UTF-8'))
// 内容区域大小
->setSize(200)
// 二维码中间区域logo图片
// 内容区域外边距
->setMargin(10);
// 生成二维码数据对象(后面两个参数都是可选的)
$result = (new PngWriter)->write($qrCode);
// 将二维码图片保存到本地服务器
$result->saveToFile(ROOT_PATH.'/public/uploads/check/'.$data['user_id'].'.png');
return ROOT_PATH.'/public/uploads/check/'.$data['user_id'].'.png';
// 返回 base64 格式的图片
// $dataUri = $result->getDataUri();
// echo "<img src='{$dataUri}'>";
// 直接输出在浏览器中
// ob_end_clean(); //处理在TP框架中显示乱码问题
// header('Content-Type: ' . $result->getMimeType());
// echo $result->getString();
}
//二维码上添加字体
public function addFontsToQrcode($data)
{
$image = imagecreatefrompng($data['path']);
$width = imagesx($image);
$height = imagesy($image);
$white = imagecolorallocate($image, 0, 0, 0); // 白色文字
$font = ROOT_PATH . 'public' . DS . 'uploads' . DS . 'yahei.ttf'; // 替换为你的字体文件路径
// 在二维码上方添加文字
$textAbove = $data['above'];
$textWidthAbove = imagettfbbox(14, 0, $font, $textAbove)[2] - imagettfbbox(14, 0, $font, $textAbove)[0];
$margin = 1; // 文字与二维码边缘的距离
$textYAbove = $margin;//这里可以自己调整字体的上下边距
$textXAbove = ($width - $textWidthAbove) / 2;
imagettftext($image, 12, 0, $textXAbove, 20, $white, $font, $textAbove);
// 在二维码下方添加文字
$textBelow = $data['below'];
$textWidthBelow = imagettfbbox(14, 0, $font, $textBelow)[2] - imagettfbbox(14, 0, $font, $textBelow)[0];
$textYBelow = $height - $margin; // 14 是文字的高度,根据字体大小调整
$textXBelow = ($width - $textWidthBelow) / 2;
imagettftext($image, 12, 0, $textXBelow, $textYBelow - 7, $white, $font, $textBelow);
// 保存修改后的图片
imagepng($image, $data['path']);
// 清理资源
imagedestroy($image);
// 返回文件路径
return $data['path'];
}
}