PHP -- 用TP5實現二維碼和logo的生成與設定及路徑儲存等
阿新 • • 發佈:2018-11-08
本文利用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外掛使用教程
歡迎補充!
千而の大獅子!