<?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']; } }