chenm / endroid-qrcode-v5
Endroid QR Code
v5.1.0
2025-03-20 12:10 UTC
Requires
- php: ^8.1
- bacon/bacon-qr-code: ^3.0
Requires (Dev)
- ext-gd: *
- endroid/quality: dev-main
- khanamiryan/qrcode-detector-decoder: ^2.0.2
- setasign/fpdf: ^1.8.2
Suggests
- ext-gd: Enables you to write PNG images
- khanamiryan/qrcode-detector-decoder: Enables you to use the image validator
- roave/security-advisories: Makes sure package versions with known security issues are not installed
- setasign/fpdf: Enables you to use the PDF writer
This package is auto-updated.
Last update: 2025-03-20 12:18:02 UTC
README
介绍
Endroid\QrCode中文字库版,可以自定义字库文件路径!!基于Endroid\QrCode-v5.1.0 ,由于官方的不内置中文字体且不能直接自定义字体,我稍改了一下,内置中文字体且支持自定义字库路径,支持如ttf、off等所有字体格式
软件架构
随便改了一下,以后再拉取不用手动改了
安装教程
composer require chenm/endroid-qrcode-v5
使用说明
使用非常简单,参考下面代码即可
namespace app\common\util; use Endroid\QrCode\Encoding\Encoding; use Endroid\QrCode\ErrorCorrectionLevel; use Endroid\QrCode\Label\Font\CnSans; use Endroid\QrCode\RoundBlockSizeMode; use Endroid\QrCode\Builder\Builder; use Endroid\QrCode\Label\LabelAlignment; use Endroid\QrCode\Label\Margin\Margin; use Endroid\QrCode\Writer\PngWriter; use Endroid\QrCode\Writer\SvgWriter; use Endroid\QrCode\Writer\PdfWriter; /** * 快捷二维码类 基于 Endroid\QrCode-v5.1.0 new Qrcode('png')->create('测试二维码内容',100, 12) */ class Qrcode { /** * 错误信息 * @var string */ public static $error = ''; public $options = [ // 文字大小 'labelSize' => 20, // 文字编码格式 'charset' => 'UTF-8', ]; /** * 二维码实例 * * @var \Endroid\QrCode\Builder\BuilderInterface */ private $qrcodeBuilder = ''; /** * 初始化 * * @param string $ext 填充格式 支持pdf、svg、png三种 * @return Qrcode */ public function __construct($ext = 'png') { switch ($ext) { case 'pdf': $this->qrcodeBuilder = Builder::create() ->writer(new PdfWriter()); break; case 'svg': $this->qrcodeBuilder = Builder::create() ->writer(new SvgWriter()); break; default: $this->qrcodeBuilder = Builder::create() ->writer(new PngWriter()); break; } } /** * 生成二维码 * * @param string $text 文本内容 * @param integer $size 二维码大小 单位PX * @param integer $qrcode_margin 边距大小 单位PX * @param array $options * @return \Endroid\QrCode\Writer\Result\ResultInterface */ public function create($text = '', $size = 100, $qrcode_margin = 12, $options = ['labelSize' => 16, 'labelText' => '']) { $this->options = array_merge($this->options, $options); // 创建 QrCode 实例 $qrCode = $this->qrcodeBuilder->data($text); // 禁用结果验证 $qrCode = $qrCode->validateResult(false); $qrCode = $qrCode->encoding(new Encoding(strtoupper($this->options['charset'] ?? 'UTF-8'))); $qrCode = $qrCode->errorCorrectionLevel(ErrorCorrectionLevel::High); $qrCode = $qrCode->size($size); $qrCode = $qrCode->margin($qrcode_margin); $qrCode = $qrCode->roundBlockSizeMode(RoundBlockSizeMode::Margin); // 添加标签(如果有) if ($this->options['labelText'] ?? '') { $labelSize = intval($this->options['labelSize'] ?? 16); $labelSize = $labelSize > 10 ? $labelSize : 14; $qrCode = $qrCode->labelText($this->options['labelText']); $qrCode = $qrCode->labelFont(new CnSans($labelSize)); $qrCode = $qrCode->labelAlignment(LabelAlignment::Center); $qrCode = $qrCode->labelMargin(new Margin(2, 0, 8, 0)); } // 使用 Builder 生成二维码 $result = $qrCode->build(); return $result; } }
参与贡献
基于Endroid\QrCode,v5.1.0版本,专用请自行注明