Files
swiftadmin/app/common/library/Qrcode.php

74 lines
2.5 KiB
PHP
Raw Normal View History

2022-11-28 19:11:12 +08:00
<?php
declare (strict_types=1);
namespace app\common\library;
use Endroid\QrCode\Color\Color;
use Endroid\QrCode\Builder\Builder;
use Endroid\QrCode\Encoding\Encoding;
use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelHigh;
use Endroid\QrCode\Label\Alignment\LabelAlignmentCenter;
use Endroid\QrCode\Label\Font\NotoSans;
use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin;
use Endroid\QrCode\Writer\PngWriter;
use Endroid\QrCode\Writer\Result\ResultInterface;
/**
* 生成二维码
* Class Qrcode
* @package app\common\library
* @author meystack
*/
class Qrcode
{
/**
* @param array $params
* @return ResultInterface
*/
public static function build(array $params = []): ResultInterface
{
$params['data'] = $params['data'] ?? 'Hello world!';
$params['size'] = $params['size'] ?? 280;
$params['margin'] = $params['margin'] ?? 0;
$params['format'] = $params['format'] ?? 'png';
$params['foreground'] = $params['foreground'] ?? "#000000";
$params['background'] = $params['background'] ?? "#ffffff";
$params['label'] = $params['label'] ?? '';
$params['logo'] = $params['logo'] ?? '';
$params['logosize'] = $params['logosize'] ?? 50;
// 二维码颜色
list($r, $g, $b) = sscanf($params['foreground'], "#%02x%02x%02x");
$foregroundColor = new Color($r, $g, $b);
// 背景色调
list($r, $g, $b) = sscanf($params['background'], "#%02x%02x%02x");
$backgroundColor = new Color($r, $g, $b);
// 创建对象
$qrcode = Builder::create()
->writer(new PngWriter())
->writerOptions([])
->data($params['data'])
->encoding(new Encoding('UTF-8'))
->errorCorrectionLevel(new ErrorCorrectionLevelHigh())
->size((int)$params['size'])
->margin((int)$params['margin'])
->roundBlockSizeMode(new RoundBlockSizeModeMargin())
->foregroundColor($foregroundColor)
->backgroundColor($backgroundColor);
// 设置LOGO
if (!empty($params['logo'])) {
$qrcode = $qrcode->logoPath($params['logo'])
->logoResizeToWidth($params['logosize'])
->logoResizeToHeight($params['logosize']);
}
// 返回实例对象
return $qrcode->labelText($params['label'])
->labelFont(new NotoSans(20))
->labelAlignment(new LabelAlignmentCenter())
->build();
}
}