thinkphp5 + PHPQRCode 類庫簡單實現生成二維碼(原始二維碼和帶 logo 二維碼)

1、 PHPQRCode 是什麼?php

PHPQRCode 基於 libqrencode 的 C 庫開發, 提供建立二維碼的 API.html

注意: PHPQRCode 的實現必須開啓支持 GD2 擴展庫 (通常狀況下都是開啓狀態)thinkphp

2、如何安裝?數組

  • 項目下經過 composer 安裝

composer require endroid/qrcodeapp

  • 手動下載複製到 tp 項目下表明第三方類庫目錄 vendor 裏.

下載地址: https://sourceforge.net/projects/phpqrcode/files/composer

3、實現過程函數

  • 使用到 vendor\aferrandini\phpqrcode\lib\PHPQRCode 下的 png 方法

public static function png($text, $outfile = false, $level = Constants::QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
    {
        $enc = QRencode::factory($level, $size, $margin);
        return $enc->encodePNG($text, $outfile, $saveandprint=false);
    }
  • 建立一個控制層文件 index.php
<?php

// index.php

namespace app\index\controller;

class Index
{
    public function index()
    {
        $content = "thinkphp + Qrcode 類庫內容測試";
        $outfile = "./static/" . date('Ymd', time()) . '.jpg';
        $level   = "L";
        $size    = "14";
        $margin  = 12;
        $save    = true;
        \PHPQRCode\QRcode::png($content, $outfile, $level, $size, $margin, $save);
         return view('index'); // 沒有繼承系統控制層基類, 因此用 view 渲染輸出
    }
}
  • 生成二維碼保存到 public/static 下後, 建立對應視圖層文件 index.html 顯示圖片
<!-- index.html -->

<img src="./static/20190211.jpg" alt="Qrcode 類庫測試圖片">

4、測試結果測試

  • 訪問網站獲得的效果圖以下:

  • 掃二維碼效果圖獲得以下內容:

5、原始的二維碼已經生成成功了, 但如何在原來的二維碼基礎加上 logo, 以加強宣傳效果?網站

  • 我在 index.php 控制器文件新增個 test 方法用來測試

原理: 用 php 圖像生成和處理相關函數組合處理 logo 圖和已生成的二維碼圖成一張新的二維碼圖ui

函數 做用
imagecreatefromstring 根據字符串中的圖像流建立一個新的圖像, 也能檢測圖片格式, 條件是 php環境支持 JPEG,PNG,GIF,WBMP 和 GD2
file_get_contents 將文件寫到一個字符串中
imagesx 獲取圖像寬度
imagesy 獲取圖像高度
imagecopyresampled 從新組合圖片並調整大小
public function test()
    {
        $logo               = './static/2.jpg'; // logo 圖
        $QR                 = './static/20190211.jpg'; // 已經生成的原始二維碼圖
        if ($logo) {
            $QR             = imagecreatefromstring(file_get_contents($QR)); // 檢測是不是圖片
            $logo           = imagecreatefromstring(file_get_contents($logo));
            $QR_width       = imagesx($QR); // 二維碼圖片寬度
            $QR_height      = imagesy($QR); // 二維碼圖片高度
            $logo_width     = imagesx($logo); // logo 圖片寬度
            $logo_height    = imagesy($logo); // logo 圖片高度
            $logo_qr_width  = $QR_width / 10; // logo 圖片在二維碼圖片中寬度大小
            $scale          = $logo_width / $logo_qr_width;
            $logo_qr_height = $logo_height / $scale; // logo 圖片在二維碼圖片中高度大小
            $from_width     = ($QR_width - $logo_qr_width) / 2;

            // 從新組合圖片並調整大小
            imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,
                $logo_qr_height, $logo_width, $logo_height);
        }
		
        imagepng($QR, './static/logo.png'); // 保存最終生成的二維碼到本地
    }

6、logo 二維碼測試結果

  • 調用 test 方法獲得 logo 二維碼
  • 掃二維碼能夠獲得同樣的測試內容
相關文章
相關標籤/搜索