1、 PHPQRCode 是什麼?php
PHPQRCode 基於 libqrencode 的 C 庫開發, 提供建立二維碼的 API.html
注意: PHPQRCode 的實現必須開啓支持 GD2 擴展庫 (通常狀況下都是開啓狀態)thinkphp
2、如何安裝?數組
composer require endroid/qrcodeapp
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 二維碼