endroid/qr-code

Endroid QR Code

资助包维护!
endroid

安装数: 42,143,303

依赖项: 266

建议者: 9

安全性: 0

星标: 4,376

关注者: 125

分支: 725

开放问题: 7

5.1.0 2024-09-08 08:52 UTC

README

endroid 提供

Latest Stable Version Build Status Total Downloads Monthly Downloads License

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

赞助商

Blackfire.io

安装

使用 Composer 安装库。如果您想生成图像,请确保已启用并配置了 GD扩展

 composer require endroid/qr-code

使用:使用构建器

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;

$result = Builder::create()
    ->writer(new PngWriter())
    ->writerOptions([])
    ->data('Custom QR code contents')
    ->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('This is the label')
    ->labelFont(new NotoSans(20))
    ->labelAlignment(LabelAlignment::Center)
    ->validateResult(false)
    ->build();

使用:不使用构建器

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

$writer = new PngWriter();

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

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

// Create generic label
$label = Label::create('Label')
    ->setTextColor(new 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();

QR Code

编写器选项

一些编写器提供编写器选项。每个可用的编写器选项都可以在编写器类中以WRITER_OPTION_为前缀的常量中找到。

  • PdfWriter
    • unit:计量单位(默认:毫米)
    • fpdf:放置图像的PDF(默认:新的PDF)
    • x:图像偏移量(默认:0)
    • y:图像偏移量(默认:0)
    • link:一个URL或由 AddLink() 返回的标识符。
  • PngWriter
    • compression_level:压缩级别(0-9,默认:-1 = zlib默认)
  • SvgWriter
    • block_id:用于外部引用的块元素ID(默认:block)
    • exclude_xml_declaration:排除XML声明(默认:false)
    • exclude_svg_width_and_height:排除宽度和高度(默认:false)
    • force_xlink_href:在兼容性问题时强制xlink命名空间(默认:false)
    • compact:使用 path 元素创建,否则使用 defsuse(默认:true)
  • WebPWriter
    • quality:图像质量(0-100,默认:80)

您可以通过这种方式提供任何编写器选项。

use Endroid\QrCode\Writer\SvgWriter;

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

编码

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

圆形块大小模式

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

  • margin (default):如果需要,二维码的大小会缩小,但最终图像的大小会因添加额外的边距而保持不变。
  • enlarge:当出现四舍五入差异时,二维码的大小和最终图像的大小都会增大。
  • shrink:当出现四舍五入差异时,二维码的大小和最终图像的大小都会缩小。
  • none:无四舍五入。此模式可用于块不需要四舍五入到像素的情况(例如SVG)。

可读性

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

验证生成的二维码

如果您需要特别确保生成的二维码可读且包含您请求的确切数据,您可以启用验证读取器,默认情况下它是禁用的。您可以通过构建器或直接在任何支持验证的写入器上完成此操作。请参阅上面的示例。

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

Symfony 集成

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

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

阅读 bundle 文档 了解更多信息。

版本控制

版本号遵循 MAJOR.MINOR.PATCH 体系结构。向后兼容性破坏性更改将保持在最低限度,但请注意,这些更改可能会发生。锁定生产环境中的依赖关系并在升级代码时测试您的代码。

许可

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