ThinkPHP生成二維碼(可自定義設置LOGO)
- 2019 年 12 月 27 日
- 筆記
基於ThinkPHP框架生成二維碼,可自定義logo及其他參數,方法簡單易懂,使用composer安裝擴展類,區區數十行程式碼便可以實現功能。可以自定義二維碼大小、寫入文件的後綴名、二維碼內容相對於整張圖片的外邊距、編碼類型、容錯率、前景色、背景色等參數。

一、使用composer安裝擴展類
composer安裝教程:composer系列之介紹及安裝
安裝擴展類庫:
endroid/qr-code
命令:
composer endroid/qr-code
二、程式碼
/**
* 二維碼生成
* @param $link
* @return string|thinkresponseJson
* @throws EndroidQrCodeExceptionInvalidPathException
* @throws EndroidQrCodeExceptionInvalidWriterException
*/
public function qrCode($link)
{
//設置路徑
if(!$link) {
return json([ 'code' => 100, 'msg' => '缺失參數' ]);
}
//加密生成文件名稱
$sha1 = sha1($link);
//設置保存目錄
$qrCode_dir = './code/';
//判斷目錄是否存在
if(!file_exists($qrCode_dir)) mkdir($qrCode_dir, 0777, true);
//拼接完整文件名稱
$file_name = $qrCode_dir . $sha1 . '.png';
//設置頭
header('Content-Type: image/png');
if(!is_file($file_name)) {
$qrCode = new QrCode($link);
$qrCode->setSize(120); //二維碼大小
$qrCode->setWriterByName('png'); //寫入文件的後綴名
$qrCode->setMargin(5); //二維碼內容相對於整張圖片的外邊距
$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 ]); //背景色
//寫入logo
$logoUrl = './code/_logo.png';
$qrCode->setLogoPath($logoUrl);
$qrCode->setLogoWidth(30);
//創建片
$qrCode->writeFile($file_name);
}
return substr($file_name, 1);
}