racinepilote/qr-code

Endroid QR Code v2

资助包维护!
endroid

4.5.1 2021-11-12 20:40 UTC

README

endroid 提供

Latest Stable Version Build Status Total Downloads Monthly Downloads License

这个库可以帮助你快速生成QR码。利用bacon/bacon-qr-code生成矩阵,并使用khanamiryan/qrcode-detector-decoder来验证生成的QR码。进一步扩展了Twig扩展、生成路由、工厂和Symfony包,以便于安装和配置。提供了不同的写入器来生成PNG、SVG、EPS或二进制格式的QR码。

安装

使用 Composer 安装库。

$ composer require racinepilote/qr-code

使用:使用构建器

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;

$result = Builder::create()
    ->writer(new PngWriter())
    ->writerOptions([])
    ->data('Custom QR code contents')
    ->encoding(new Encoding('UTF-8'))
    ->errorCorrectionLevel(new ErrorCorrectionLevelHigh())
    ->size(300)
    ->margin(10)
    ->roundBlockSizeMode(new RoundBlockSizeModeMargin())
    ->logoPath(__DIR__.'/assets/symfony.png')
    ->labelText('This is the label')
    ->labelFont(new NotoSans(20))
    ->labelAlignment(new LabelAlignmentCenter())
    ->build();

使用:不使用构建器

use Endroid\QrCode\Color\Color;
use Endroid\QrCode\Encoding\Encoding;
use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelLow;
use Endroid\QrCode\QrCode;
use Endroid\QrCode\Label\Label;
use Endroid\QrCode\Logo\Logo;
use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin;
use Endroid\QrCode\Writer\PngWriter;

$writer = new PngWriter();

// Create QR code
$qrCode = QrCode::create('Data')
    ->setEncoding(new Encoding('UTF-8'))
    ->setErrorCorrectionLevel(new ErrorCorrectionLevelLow())
    ->setSize(300)
    ->setMargin(10)
    ->setRoundBlockSizeMode(new RoundBlockSizeModeMargin())
    ->setForegroundColor(new Color(0, 0, 0))
    ->setBackgroundColor(new Color(255, 255, 255));

// Create generic logo
$logo = Logo::create(__DIR__.'/assets/symfony.png')
    ->setResizeToWidth(50);

// Create generic label
$label = Label::create('Label')
    ->setTextColor(new Color(255, 0, 0));

$result = $writer->write($qrCode, $logo, $label);

使用:处理结果

// Directly output the QR code
header('Content-Type: '.$result->getMimeType());
echo $result->getString();

// Save it to a file
$result->saveToFile(__DIR__.'/qrcode.png');

// Generate a data URI to include image data inline (i.e. inside an <img> tag)
$dataUri = $result->getDataUri();

QR Code

写入器选项

use Endroid\QrCode\Writer\SvgWriter;

$builder->setWriterOptions([SvgWriter::WRITER_OPTION_EXCLUDE_XML_DECLARATION => true]);

编码

如果你使用条码扫描器,在读取生成的QR码时可能会遇到一些麻烦。根据你选择的编码,你将会有额外对应于ECI块的数据量。一些条码扫描器未编程为解释此信息块。为了确保最大兼容性,你可以使用默认编码ISO-8859-1,这是条码扫描器使用的默认编码(如果你的字符集支持,即没有中文字符)。

圆形块大小模式

默认情况下,块大小会被四舍五入以保证图像清晰并提高可读性。然而,还有一些其他四舍五入的变体。

  • margin (默认):如果需要,QR码的大小会缩小,但最终图像的大小保持不变,因为增加了额外的边距。
  • enlarge:当出现四舍五入差异时,QR码和最终图像的大小会增大。
  • shrink:当出现四舍五入差异时,QR码和最终图像的大小会缩小。
  • none:不四舍五入。当块不需要四舍五入到像素时(例如SVG)可以使用此模式。

可读性

QR码的可读性主要取决于大小、输入长度、错误纠正级别以及任何可能覆盖图像的标志,因此如果你在寻找最佳结果,可以调整这些参数。你还可以检查$qrCode->getRoundBlockSize()值,以查看是否四舍五入块尺寸以使图像更加清晰和可读。请注意,四舍五入块大小可能导致额外的填充来补偿四舍五入差异。最后,如果可能,编码(默认UTF-8以支持大型字符集)可以设置为ISO-8859-1以改善可读性。

内置验证读取器

通过调用setValidateResult(true)可以启用内置验证读取器(默认禁用)。此验证读取器不能保证所有读取器都能读取QR码,但它可以帮助你提供最小质量级别。请注意,验证器可能消耗相当数量的额外资源,并且它应该仅在使用时单独安装。

Symfony集成

endroid/qr-code-bundle将QR码库集成到Symfony中,以提供更好的体验。

  • 配置默认设置(如图像大小、默认写入器等)
  • 支持多配置和通过别名注入
  • 通过URL如/qr-code//Hello生成定义配置的QR码
  • 使用专用函数直接从Twig生成QR码或URL

阅读更多组件文档

版本管理

版本号遵循MAJOR.MINOR.PATCH方案。将尽量减少向后兼容性破坏性更改,但请注意,这些更改可能会发生。在生产环境中锁定依赖项,并在升级时测试您的代码。

许可证

此组件受MIT许可证的约束。有关完整的版权和许可证信息,请参阅与源代码一起分发的LICENSE文件。