deng-tp5/qr-code

dev-master 2019-07-23 03:30 UTC

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 提供

Latest Stable Version Build Status Total Downloads Monthly Downloads License

这个库可以帮助您快速生成二维码。使用 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;
    }



}

QR Code

===============================================

安装

使用 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);

QR Code

内置验证读取器

您可以通过调用 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文件。