zoujingli/qrcode

Endroid QrCode for ThinkAdmin

v1.0.3 2023-09-14 15:41 UTC

This package is auto-updated.

Last update: 2024-09-03 09:59:56 UTC


README

Latest Stable Version Latest Unstable Version Total Downloads Monthly Downloads License

二维码工具zoujingli/qrcode是基于endroid/qr-code进行修改的,最低支持php7.1版本;

详细文档请见原仓库:https://github.com/endroid/qr-code

为了满足在PHP7运行的需求,对原仓库进行了以下修改:

  1. 修改代码语法,使其最低可在PHP7.1上运行;
  2. 原仓库的开源协议保持不变,未增加额外功能代码;
  3. 目前已测试的PHP环境有PHP7.1 PHP7.2 PHP7.4
  4. 移除原仓库的部分测试代码及字体文件,优化安装包体积;
// 安装执行指令
composer require zoujingli/qrcode

常规配置如下,更多参数请参阅其官方文档。

$result = \Endroid\QrCode\Builder\Builder::create()
    ->writer(new \Endroid\QrCode\Writer\PngWriter())
    ->writerOptions([])
    ->data('Custom QR code contents')
    ->encoding(new \Endroid\QrCode\Encoding\Encoding('UTF-8'))
    // ->errorCorrectionLevel(new \Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelHigh())
    ->size(300)
    ->margin(10)
    // ->roundBlockSizeMode(new \Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin())
    
    //// 设置二维码 LOGO 图片
    // ->logoPath(__DIR__.'/icon.png')
    
    //// 设置二维码标签字段
    // ->labelText('This is the label')
    // ->labelFont(new \Endroid\QrCode\Label\Font\OpenSans(20))
    // ->labelAlignment(new \Endroid\QrCode\Label\Alignment\LabelAlignmentCenter())
    ->validateResult(false)
    ->build();

// 输出 Base64 图片
echo $result->getDataUri();

用法:使用构建器

$result = \Endroid\QrCode\Builder\Builder::create()
    ->writer(new \Endroid\QrCode\Writer\PngWriter())
    ->writerOptions([])
    ->data('Custom QR code contents')
    ->encoding(new \Endroid\QrCode\Encoding\Encoding('UTF-8'))
    ->errorCorrectionLevel(new \Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelHigh())
    ->size(300)
    ->margin(10)
    ->roundBlockSizeMode(new \Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin())
    ->logoPath(__DIR__.'/icon.png')
    ->labelText('This is the label')
     ->labelFont(new \Endroid\QrCode\Label\Font\OpenSans(20))
    ->labelAlignment(new \Endroid\QrCode\Label\Alignment\LabelAlignmentCenter())
    ->validateResult(false)
    ->build();

用法:不使用构建器

$writer = new \Endroid\QrCode\Writer\PngWriter();

// Create QR code
$qrCode = \Endroid\QrCode\QrCode::create('Life is too short to be generating QR codes')
    ->setEncoding(new \Endroid\QrCode\Encoding\Encoding('UTF-8'))
    ->setErrorCorrectionLevel(new \Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelLow())
    ->setSize(300)
    ->setMargin(10)
    ->setRoundBlockSizeMode(new \Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin())
    ->setForegroundColor(new \Endroid\QrCode\Color\Color(0, 0, 0))
    ->setBackgroundColor(new \Endroid\QrCode\Color\Color(255, 255, 255));

// Create generic logo
$logo = \Endroid\QrCode\Logo\Logo::create(__DIR__.'/icon.png')->setResizeToWidth(50);

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

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

// Validate the result
$writer->validateResult($result, 'Life is too short to be generating QR codes');

用法:处理结果

// 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();
写入器选项
use Endroid\QrCode\Writer\SvgWriter;

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

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

圆形块大小模式

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

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

可读性

二维码的可读性主要取决于大小、输入长度、纠错级别以及图像上可能存在的任何可能的徽标,因此您可以调整这些参数以获得最佳结果。您还可以检查 $qrCode->getRoundBlockSize() 的值,以查看块尺寸是否进行了四舍五入,以便图像更清晰和可读。请注意,四舍五入块大小可能导致额外的填充以补偿四舍五入差异。最后,如果可能的话,编码(默认UTF-8以支持大型字符集)可以设置为ISO-8859-1以改进可读性。

验证生成的二维码

如果您需要非常确信您生成的二维码是可读的并且包含您请求的确切数据,您可以通过启用验证读取器来实现,该读取器默认是禁用的。您可以通过构建器或直接在支持验证的任何写入器上完成此操作。请参阅上面的示例。

请注意,验证会影响性能,因此仅在有问题的情况下使用。

Symfony集成

endroid/qr-code-bundle将二维码库集成到Symfony中,以获得更好的体验。

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

阅读bundle文档以获取更多信息。

版本管理

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

许可证

本软件包采用MIT许可协议。有关完整的版权和许可信息,请查看与源代码一同分发的LICENSE文件。