endroid/qr-code version:6.0.3 默认不支持中文;
1、https://fonts.google.com/noto/fonts,从这里下载字体;
2、下载简体中文:Noto Sans Simplified Chinese
3、下载后,把压缩包解压,把`NotoSansSC-Regular.ttf`字体,保存在`endroid/qr-code/assets/`文件夹里;
4、照猫画虎:`endroid/qr-code/src/Label/Font/`里的`OpenSans.php`复制一份,重新命名:`NotoSans.php`;
5、NotoSans.php的代码如下:
<?php
declare(strict_types=1);
namespace Endroid\QrCode\Label\Font;
final readonly class NotoSans implements FontInterface
{
public function __construct(
private int $size = 16,
) {
}
public function getPath(): string
{
return __DIR__.'/../../../assets/NotoSansSC-Regular.ttf'; // 路径与字体名称一定要正确;
}
public function getSize(): int
{
return $this->size;
}
}
6、生成二维码的代码如下:
use Endroid\QrCode\Builder\Builder;
use Endroid\QrCode\Encoding\Encoding;
use Endroid\QrCode\ErrorCorrectionLevel;
use Endroid\QrCode\Label\LabelAlignment;
use Endroid\QrCode\Label\Font\NotoSans; // 和前面我们修改的文件名,保持一致;
use Endroid\QrCode\RoundBlockSizeMode;
use Endroid\QrCode\Writer\PngWriter;
public function genQrCode()
{
$builder = new Builder(
writer: new PngWriter(),
writerOptions: [],
validateResult: false,
data: 'https://www.sohu.com/',
encoding: new Encoding('UTF-8'),
errorCorrectionLevel: ErrorCorrectionLevel::High,
size: 300,
margin: 10,
roundBlockSizeMode: RoundBlockSizeMode::Margin,
// logoPath: __DIR__.'/assets/symfony.png',
// logoResizeToWidth: 50,
// logoPunchoutBackground: true,
labelText: '搜狐',
labelFont: new NotoSans(20), // 这里也要保持一致;
labelAlignment: LabelAlignment::Center
);
$result = $builder->build();
$dataUri = $result->getDataUri();
return '<img src="'.$dataUri.'">';
}