123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- <?php
- namespace App\Services;
- use SimpleSoftwareIO\QrCode\Facades\QrCode;
- use Endroid\QrCode\Builder\Builder;
- use Endroid\QrCode\Writer\PngWriter;
- class BaseService
- {
- const YES = 1;
- const NOT = 0;
- /**
- * @description: 生成充值二维码
- * @param {*} $address 充值地址
- * @return {*}
- */
- public static function createRechargeQrCode($address = '')
- {
- $content = $address;
- $qrSize = 300;
- $font = 4;
- $textHeight = 20;
- $padding = 10;
- // 生成二维码图像对象
- $result = Builder::create()
- ->writer(new PngWriter())
- ->data($content)
- ->size($qrSize)
- ->margin(0)
- ->build();
- $qrImage = imagecreatefromstring($result->getString());
- // 创建画布(加上下方文字区和边距)
- $canvasWidth = $qrSize + $padding * 2;
- $canvasHeight = $qrSize + $textHeight + $padding * 2;
- $image = imagecreatetruecolor($canvasWidth, $canvasHeight);
- // 背景白色
- $white = imagecolorallocate($image, 255, 255, 255);
- imagefill($image, 0, 0, $white);
- // 黑色字体
- $black = imagecolorallocate($image, 0, 0, 0);
- // 合并二维码图像
- imagecopy($image, $qrImage, $padding, $padding, 0, 0, $qrSize, $qrSize);
- // 写文字
- $textWidth = imagefontwidth($font) * strlen($content);
- $x = ($canvasWidth - $textWidth) / 2;
- $y = $qrSize + $padding + 5;
- imagestring($image, $font, $x, $y, $content, $black);
- // 生成文件名
- $filename = $address. '.png';
- $relativePath = 'recharge/' . $filename;
- $storagePath = storage_path('app/public/' . $relativePath);
- // 确保目录存在
- @mkdir(dirname($storagePath), 0777, true);
- // 保存图片到文件
- imagepng($image, $storagePath);
- // 清理
- imagedestroy($qrImage);
- imagedestroy($image);
- // 返回 public 存储路径(可用于 URL)
- return 'storage/'.$relativePath; // 或返回 Storage::url($relativePath);
- }
- /**
- * 判断指定地址的二维码是否已生成(已存在文件)
- *
- * @param string $address 充值地址
- * @return
- */
- public static function rechargeQrCodeExists(string $address)
- {
- $filename = $address . '.png';
- $relativePath = 'recharge/' . $filename;
- $storagePath = storage_path('app/public/' . $relativePath);
- $path = '';
- if(file_exists($storagePath)){
- $path = 'storage/'.$relativePath;
- }
- return $path;
- }
- /**
- * @description: 转成树形数据
- * @param {*} $list 初始数据
- * @param {*} $pid 父id
- * @param {*} $level 层级
- * @param {*} $pid_name pid字段名称 默认pid
- * @param {*} $id_name 主键id 名称
- * @return {*}
- */
- public static function toTree($list,$pid=0,$level=0,$pid_name='pid',$id_name='id')
- {
- $arr=[];
- $level++;
- foreach($list as $k => $v){
- if($pid==$v[$pid_name]){
- $v['level']=$level;
- $v['children']=self::toTree($list,$v[$id_name],$level,$pid_name,$id_name);
- $arr[]=$v;
- }
- }
- return $arr;
- }
- }
|