[TOC] #### 1. 前言 --- packagist 傳送門(mén): [https://packagist.org/packages/endroid/qr-code](https://packagist.org/packages/endroid/qr-code) 使用該擴(kuò)展前,先確認(rèn)其 PHP 版本要求,endroid/qr-code 4.x 需要 PHP 版本 7.4+ 使用前需要檢查下是否啟用了 gd2 擴(kuò)展,對(duì)于 endroid/qr-code 版本選擇,參考擴(kuò)展包文檔對(duì) PHP 版本的要求 #### 2. 安裝擴(kuò)展 --- 執(zhí)行 composer 命令安裝 endroid/qr-code 擴(kuò)展 ``` composer require endroid/qr-code ``` 會(huì)生成如下目錄結(jié)構(gòu)內(nèi)容 ``` ├─vendor │ ├─autoload.php │ ├─ ... ├─composer.json ├─composer.lock ``` 如果當(dāng)前項(xiàng)目架構(gòu)沒(méi)有基于任何框架,只需要引入 composer 的自動(dòng)加載文件即可 如果當(dāng)前項(xiàng)目是基于 ThinkPHP,Laravel 等主流框架,這些框架都支持 composer,執(zhí)行安裝擴(kuò)展包命令后可以直接使用 ``` require 'vendor/autoload.php'; ``` #### 3. 生成二維碼 --- **使用 Builder 生成器:** ```php use Endroid\QrCode\Builder\Builder; use Endroid\QrCode\Encoding\Encoding; use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelHigh; use Endroid\QrCode\Label\Alignment\LabelAlignmentCenter; use Endroid\QrCode\Label\Font\NotoSans; use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin; use Endroid\QrCode\Writer\PngWriter; $result = Builder::create() ->writer(new PngWriter()) ->writerOptions([]) // 二維碼文本 ->data('http://beautifulforever.com.cn') // 內(nèi)容編碼 ->encoding(new Encoding('UTF-8')) // 容錯(cuò)等級(jí)(越高二維碼越密集) ->errorCorrectionLevel(new ErrorCorrectionLevelHigh()) // 二維碼內(nèi)容區(qū)域大小 ->size(300) // 二維碼內(nèi)容外邊距大小 ->margin(10) // 二維碼內(nèi)容圓形塊尺寸模型 ->roundBlockSizeMode(new RoundBlockSizeModeMargin()) // 二維碼中間區(qū)域logo圖片 ->logoPath(__DIR__ . '/3.png') ->logoResizeToWidth(100) ->logoResizeToHeight(100) // 二維碼下方文字 ->labelText('長(zhǎng)按識(shí)別二維碼') ->labelFont(new NotoSans(20)) ->labelAlignment(new LabelAlignmentCenter()) // 驗(yàn)證讀取器(默認(rèn)情況下禁用) ->validateResult(false) // 執(zhí)行生成器 ->build(); ``` **不使用 Builder 生成器:** ```php use Endroid\QrCode\Color\Color; use Endroid\QrCode\Encoding\Encoding; use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelLow; use Endroid\QrCode\QrCode; use Endroid\QrCode\Label\Label; use Endroid\QrCode\Logo\Logo; use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin; use Endroid\QrCode\Writer\PngWriter; $writer = new PngWriter(); $qrCode = QrCode::create('http://beautifulforever.com.cn') // 內(nèi)容編碼 ->setEncoding(new Encoding('UTF-8')) // 容錯(cuò)等級(jí) ->setErrorCorrectionLevel(new ErrorCorrectionLevelLow()) // 內(nèi)容區(qū)域大小 ->setSize(300) // 內(nèi)容區(qū)域外邊距 ->setMargin(10) // 內(nèi)容圓形塊尺寸模型 ->setRoundBlockSizeMode(new RoundBlockSizeModeMargin()) // 內(nèi)容顏色 ->setForegroundColor(new Color(0, 0, 0)) // 背景顏色 ->setBackgroundColor(new Color(255, 255, 255)); // 二維碼logo logo $logo = Logo::create(__DIR__ . '/3.png') ->setResizeToWidth(50); // 二維碼下方文字 label $label = Label::create('Label') ->setTextColor(new Color(255, 0, 0)); // 生成二維碼數(shù)據(jù)對(duì)象(后面兩個(gè)參數(shù)都是可選的) $result = $writer->write($qrCode, $logo, $label); ``` **實(shí)際開(kāi)發(fā)中,使用最多的是根據(jù)一串普通文本生成字符串,所以我將代碼做了簡(jiǎn)化,方便以后快速使用** ```php use Endroid\QrCode\QrCode; use Endroid\QrCode\Writer\PngWriter; use Endroid\QrCode\Encoding\Encoding; $qrCode = QrCode::create('http://beautifulforever.com.cn') // 內(nèi)容編碼 ->setEncoding(new Encoding('UTF-8')) // 內(nèi)容區(qū)域大小 ->setSize(200) // 內(nèi)容區(qū)域外邊距 ->setMargin(10); // 生成二維碼數(shù)據(jù)對(duì)象 $result = (new PngWriter)->write($qrCode); ``` #### 4. 輸出二維碼 --- 以下是三種輸出二維碼的方式,根據(jù)項(xiàng)目場(chǎng)景選擇合適的方式即可 ```php // 直接輸出在瀏覽器中 // ob_end_clean(); //處理在TP框架中顯示亂碼問(wèn)題 // header('Content-Type: ' . $result->getMimeType()); // echo $result->getString(); // 將二維碼圖片保存到本地服務(wù)器 // $result->saveToFile(__DIR__ . '/qrcode.png'); // 返回 base64 格式的圖片 $dataUri = $result->getDataUri(); echo "<img src='{$dataUri}'>"; ```