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);

}