1. 程式人生 > >PHP -- 用TP5實現二維碼和logo的生成與設定及路徑儲存等

PHP -- 用TP5實現二維碼和logo的生成與設定及路徑儲存等

本文利用TP5實現二維碼的生成與設定,logo的新增與設定。

1. 利用 composer 獲取 qr_code 外掛

composer require endroid/qr-code

我用的編譯器是PhpStorm ,所以在下面的Terminal中可以輸入以上命令即可。如下圖:

完成後可以在 Vender/endroid/qr-code 下找到安裝好的檔案。

 2. 程式碼撰寫

2.1 簡單版本

最簡單的看到二維碼的程式碼如下,執行就可以在網頁上看到,手機掃描,直接訪問輸入的網址。如下 index 控制器下的 Index.php

<?php

namespace app\index\controller;

use Endroid\QrCode\QrCode;
use think\Controller;

class Index extends Controller
{
    public function index()
    {
        $qrCode = new QrCode('http://www.baidu.com');
        header('Content-Type: ' . $qrCode->getContentType());
        echo $qrCode->writeString();
        die;
    }
}

2.2 複雜版本 

使用二維碼的時候,除了內容外,還是需要對二維碼進行一定的設定,比如二維碼的大小,顏色,邊框等;還有logo的新增,logo的大小等。二維碼圖片存放位置等。

前提:儲存二維碼需要給二維碼個路徑,需要logo的話,還要提供logo的路徑。

假如你已經提供了以上兩個路徑。下面就把生成二維碼封裝成了一個函式,程式碼如下:

index控制器下的Index.php :

<?php

namespace app\index\controller;

use Endroid\QrCode\ErrorCorrectionLevel;
use Endroid\QrCode\LabelAlignment;
use Endroid\QrCode\QrCode;
use think\Controller;

class Index extends Controller
{

    public function index()
    {
        // 二維碼內容
        $code_content = 'https://blog.csdn.net/hongyuancao/article/details/83412186';
        // 二維碼名字
        $code_name = 'hongyuancao_code';
        // logo圖片地址
        $code_logo = 'static\index\img\hongyuancao.jpg';
        // logo的尺寸
        $code_logo_width = 40;
        // 返回二維碼存放的地址
        $code_img = self::getQrCode($code_content, $code_name, 200, $code_logo, $code_logo_width);
        $data = [
            'code_img' => $code_img,
            'code_name' => $code_name,
        ];
        $this->assign('data', $data);
        return $this->fetch();
    }

    public static function getQrCode($code_content, $code_name, $code_size = 100, $code_logo = '', $code_logo_width = 20, $code_font = null)
    {
        // 二維碼內容
        $qr_code = new QrCode($code_content);
        // 二維碼設定
        $qr_code->setSize($code_size);
        // 邊框寬度
        $qr_code->setMargin(10);
        // 圖片格式
        $qr_code->setWriterByName('png');
        // 字元編碼
        $qr_code->setEncoding('UTF-8');
        // 容錯等級,分為L、M、Q、H四級
        $qr_code->setErrorCorrectionLevel(ErrorCorrectionLevel::HIGH);
        // 顏色設定,前景色,背景色(預設黑白)
        $qr_code->setForegroundColor(['r' => 0, 'g' => 0, 'b' => 0, 'a' => 0]);
        $qr_code->setBackgroundColor(['r' => 255, 'g' => 255, 'b' => 255, 'a' => 0]);
        // 二維碼標籤
        if ($code_font) {
            $qr_code->setLabel('Scan the Code ', 16, __DIR__ . '字型地址', LabelAlignment::CENTER);
        }
        // logo設定
        if ($code_logo) {
            $qr_code->setLogoPath($code_logo);
            // logo大小
            $qr_code->setLogoWidth($code_logo_width);
            // 存放地址
            $code_path = 'static/qrcode/' . $code_name . '.png';
            $qr_code->writeFile($code_path);
        } else {
            // 存放地址
            $code_path = 'static/qrcode/' . $code_name . '.png';
            $qr_code->writeFile($code_path);
        }
        // 輸出圖片
        header('Content-Type: ' . $qr_code->getContentType());
        $qr_code->writeString();
        return $code_path;
    }

}

 index.html

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title></title>
</head>
<body>
<img src="{$data.code_img}" alt="">
<div>{$data.code_name}</div>
</body>
</html>

執行後就會在頁面上顯示自己的二維碼。如下圖:

 

3. qr_code 引數介紹 

setSize                 -- 二維碼大小 px
setWriterByName         -- 寫入檔案的字尾名
setMargin               -- 二維碼內容相對於整張圖片的外邊距
setEncoding             -- 編碼型別
setErrorCorrectionLevel -- 容錯等級,分為L、M、Q、H四級
setForegroundColor      -- 前景色
setBackgroundColor      -- 背景色
setLabel                -- 二維碼標籤
setLogoPath             -- 二維碼logo路徑
setLogoWidth            -- 二維碼logo大小 px

想要了解更多,大家可以檢視這個網址:qr_code外掛使用教程

 

歡迎補充!

千而の大獅子!