deng-tp5 / qr-code
二维码qr-code
Requires
- php: >=7.2
- endroid/qr-code: ^3.6
This package is auto-updated.
Last update: 2024-09-23 14:49:37 UTC
README
基于ThinkPHP5实现【二维码生成】 严格按照TP5框架目录方式上传
有些功能大家可以加以修改直接做成一个公共接口,放在application的common.php中,这样在其他控制器的方法中有需要调用的时候,直接传入参数进行调用
(微信自动登录、微信支付、支付宝支付、Web推送、阿里云短信、极光推送。正在开发中)
在线颜色网址:http://tool.oschina.net/commons?type=3
QR Code
由 endroid 提供
这个库可以帮助您快速生成二维码。使用 bacon/bacon-qr-code 生成矩阵,并使用 khanamiryan/qrcode-detector-decoder 验证生成的二维码。此外,还扩展了Twig扩展、生成路由、工厂和Symfony包,以便于安装和配置。
composer require deng-tp5/qr-code
common.php
$url = 'myphp.vip'; create_qrcode($url); // 引用commmon里的方法 /** * 生成二维码公共方法 * @param $url * @return \Endroid\QrCode\Response\QrCodeResponse * @throws \Endroid\QrCode\Exception\InvalidPathException * @author: deng (2019/7/17 16:04) */ function create_qrcode($url) { $condition['text'] = $url; return QrCodeDeng::createQrcodeAdvanced($condition); }
Deng-qr-code用法【已封装】
/** * Created by PhpStorm. * User: 12155 * Date: 2019/7/18 * Time: 14:27 */ namespace DengTp5; use Endroid\QrCode\ErrorCorrectionLevel; use Endroid\QrCode\LabelAlignment; use Endroid\QrCode\QrCode; use Endroid\QrCode\Response\QrCodeResponse; class QrCodeDeng { /** * 基础用法 * @param $text * @param $a * @return QrCodeResponse * @throws \Endroid\QrCode\Exception\InvalidPathException * @author: deng (2019/7/18 18:07) */ public static function createQrcodeBase($text = 'demo') { $qrCode = new QrCode($text); header('Content-Type: ' . $qrCode->getContentType()); echo $qrCode->writeString(); exit; } /** * 高级用法 * text 文本 * logo_img 二维码logo * bottom_text 底部文字 * size 图片大小 * margin logo大小 * foreground_color 二维码颜色 * background_color 二维码背景颜色 * @return QrCodeResponse * @throws \Endroid\QrCode\Exception\InvalidPathException * @author: deng (2019/7/18 21:37) */ public static function createQrcodeAdvanced($conndition = [], $is_save = false) { // 定义当前框架所在目录 $rootPath = \think\facade\Env::get('root_path'); // 引入字体文件 $font = $rootPath.'/./vendor/deng-tp5/qr-code/assets/fonts/noto_sans.otf'; // 引入logo图片 $logoImg = $rootPath.'/./vendor/deng-tp5/qr-code/assets/images/logo.png'; $text = !empty($conndition['text'])?$conndition['text']:'myphp.vip'; $logoImg = !empty($conndition['logo_img'])?$conndition['logo_img']:$logoImg; $bottomText = !empty($conndition['bottom_text'])?$conndition['bottom_text']:'二维码底部'; $size = !empty($conndition['size'])?$conndition['size']:'300'; $margin = !empty($conndition['margin'])?$conndition['margin']:'12'; // 是否传递二维码 $foregroundColor = !empty($conndition['foreground_color'])?$conndition['foreground_color']:'0,0,0'; $foregroundColorArray = explode(',',$foregroundColorArray); // 是否传递二维码背景颜色 $backgroundColor = !empty($conndition['background_color'])?$conndition['background_color']:'255,255,255'; $backgroundColorArray = explode(',',$backgroundColor); // -------------构建参数end $dir = $rootPath.'/./public/qrcode/'. date('Ym'); // 如果文件夹不存在,将以递归方式创建该文件夹 is_dir($dir) OR mkdir($dir, 0777, true); $fileName = $dir.'/'.date('d').'-'.time().'-'.rand(1000,9999).'.png'; // Create a basic QR code $qrCode = new \Endroid\QrCode\QrCode($text); $qrCode->setSize($size); // Set advanced options $qrCode->setWriterByName('png'); $qrCode->setMargin($margin); $qrCode->setEncoding('UTF-8'); $qrCode->setErrorCorrectionLevel(new \Endroid\QrCode\ErrorCorrectionLevel(\Endroid\QrCode\ErrorCorrectionLevel::HIGH)); // 底色 $qrCode->setForegroundColor(['r' => $foregroundColorArray[0], 'g' => $foregroundColorArray[1], 'b' => $foregroundColorArray[2], 'a' => 0]); // 二维码背景颜色 $qrCode->setBackgroundColor(['r' => $backgroundColorArray[0], 'g' => $backgroundColorArray[1], 'b' => $backgroundColorArray[2], 'a' => 0]); $qrCode->setLabel($bottomText, 16, $font, \Endroid\QrCode\LabelAlignment::CENTER); $qrCode->setLogoPath($logoImg); $qrCode->setLogoSize(120, 120); $qrCode->setRoundBlockSize(true); $qrCode->setValidateResult(false); $qrCode->setWriterOptions(['exclude_xml_declaration' => true]); // Directly output the QR code header('Content-Type: '.$qrCode->getContentType()); $writeString = $qrCode->writeString(); if ($is_save) { // Save it to a file $qrCode->writeFile($fileName); // Create a response object $response = new \Endroid\QrCode\Response\QrCodeResponse($qrCode); } echo $writeString;exit; } }
===============================================
安装
使用 Composer 安装库。
$ composer require endroid/qr-code
基本用法
use Endroid\QrCode\QrCode; $qrCode = new QrCode('Life is too short to be generating QR codes'); header('Content-Type: '.$qrCode->getContentType()); echo $qrCode->writeString();
高级用法
use Endroid\QrCode\ErrorCorrectionLevel; use Endroid\QrCode\LabelAlignment; use Endroid\QrCode\QrCode; use Endroid\QrCode\Response\QrCodeResponse; // Create a basic QR code $qrCode = new QrCode('Life is too short to be generating QR codes'); $qrCode->setSize(300); // Set advanced options $qrCode->setWriterByName('png'); $qrCode->setMargin(10); $qrCode->setEncoding('UTF-8'); $qrCode->setErrorCorrectionLevel(new ErrorCorrectionLevel(ErrorCorrectionLevel::HIGH)); $qrCode->setForegroundColor(['r' => 0, 'g' => 0, 'b' => 0, 'a' => 0]); $qrCode->setBackgroundColor(['r' => 255, 'g' => 255, 'b' => 255, 'a' => 0]); $qrCode->setLabel('Scan the code', 16, __DIR__.'/../assets/fonts/noto_sans.otf', LabelAlignment::CENTER); $qrCode->setLogoPath(__DIR__.'/../assets/images/symfony.png'); $qrCode->setLogoSize(150, 200); $qrCode->setRoundBlockSize(true); $qrCode->setValidateResult(false); $qrCode->setWriterOptions(['exclude_xml_declaration' => true]); // Directly output the QR code header('Content-Type: '.$qrCode->getContentType()); echo $qrCode->writeString(); // Save it to a file $qrCode->writeFile(__DIR__.'/qrcode.png'); // Create a response object $response = new QrCodeResponse($qrCode);
内置验证读取器
您可以通过调用 setValidateResult(true) 启用内置验证读取器(默认禁用)。此验证读取器不能保证所有读取器都能读取二维码,但它可以帮助您提供最小质量级别。
二维码的可读性主要取决于大小、输入长度、纠错级别以及图像上可能存在的任何徽标,因此您可以调整这些参数以获得最佳结果。您还可以检查 $qrCode->getRoundBlockSize() 值,以查看块维度是否已四舍五入,从而使图像更加清晰和可读。
请注意,验证器可能会消耗相当数量的额外资源。
Symfony集成
endroid/qr-code-bundle 将二维码库集成到Symfony中,以提供更好的体验。
- 配置默认设置(如图像大小、默认写入器等)
- 通过工厂服务从任何地方快速生成二维码
- 直接通过URL如 /qr-code/<text>.png?size=300 生成二维码
- 使用专用函数从Twig直接生成二维码或URL
阅读 bundle文档 了解更多信息。
版本控制
版本号遵循 MAJOR.MINOR.PATCH 方案。向后兼容性破坏性更改将尽可能保持最小,但请注意,这些更改可能会发生。在生产中锁定依赖关系,并在升级代码时测试您的代码。
许可
此包采用MIT许可。有关完整的版权和许可信息,请查看与源代码一起分发的LICENSE文件。