1. 程式人生 > >在 Laravel 5 中通過 Simple QrCode 擴充套件包生成二維碼詳解

在 Laravel 5 中通過 Simple QrCode 擴充套件包生成二維碼詳解

1、簡介

Simple Qrcode 是 Bacon/BaconQrCode 針對 Laravel 框架的封裝版本,用於在 Laravel 中為生成二維碼提供介面。

2、安裝&配置

在專案根目錄下使用如下命令安裝依賴包:

composer require simplesoftwareio/simple-qrcode 1.3.*

在 config/app.php 註冊服務提供者:

SimpleSoftwareIO\QrCode\QrCodeServiceProvider::class

同樣在 config/app.php 新增 QrCode 門面:

'QrCode' => SimpleSoftwareIO\QrCode\Facades\QrCode::class

3、快速上手

在檢視中列印

<div class="visible-print text-center">
    {!! QrCode::size(100)->generate(Request::url()); !!}
    <p>Scan me to return to the original page.</p>
</div>

嵌入到郵件內容

<img src="{!!$message->embedData(QrCode::format('png')->generate('Embed me into an e-mail!'), 'QrCode.png', 'image/png')!!}">

4、基本用法

基本使用

Qrcode 生成器用法很簡單,最基本的語法如下:

QrCode::generate('Hello,LaravelAcademy!');

這將會生成一個二維碼,用手機掃描該二維碼將會跳轉到一個顯示“Hello,LaravelAcademy!”的頁面。

如果想要顯示中文,需要使用如下方式指定編碼

QrCode::encoding('UTF-8')->generate('你好,Laravel學院!');

generate() 方法用於生產二維碼圖片,預設情況下,返回一個 SVG 格式的圖片字串,在檢視中我們可以可以通過如下方式將其打印出來:

{!! QrCode::generate('Hello,LaravelAcademy!'); !!}

此外,generate() 方法還可以接受第二個引數用於指定檔名以及儲存路徑:

if(!file_exists(public_path('qrcodes')))
    mkdir(public_path('qrcodes'));
QrCode::generate('Hello,LaravelAcademy!', public_path('qrcodes/qrcode.svg'));

這樣生成的 SVG 檔案會儲存到 /public/qrcodes/qrcode.svg

修改儲存格式

前面我們說了,QrCode 預設生成 SVG 格式檔案,當然,我們可以修改儲存格式,目前 Simple QrCode 支援三種格式:PNG、SVG 和 RPS。要修改生成二維碼圖片格式,可以使用 format() 方法:

QrCode::format('png')->generate('Hello,LaravelAcademy!',public_path('qrcodes/qrcode.png'));

這樣會在 /public/qrcodes 目錄下生成 qrcode.png 圖片。要生成其它格式,將對應格式傳入 format() 方法即可。

注:format() 方法必須在所有其它格式化方法之前呼叫,這些格式化方法包括sizecolorbackgroundColor 和 margin

修改二維碼圖片尺寸

QrCode 生成器預設返回最小尺寸二維碼圖片。如果要修改生成二維碼圖片尺寸,可以使用 size() 方法:

QrCode::format('png')->size(100)->generate('Hello,LaravelAcademy!',public_path('qrcodes/qrcode.png'));

這樣會生成一個寬高均為100畫素的二維碼圖片:

在Laravel中使用Simple Qrcode生成二維碼

修改顏色(前景色/背景色)

我們還可以通過 color() 方法來修改生成二維碼圖片的顏色,顏色引數以 RGB 格式表示:

QrCode::format('png')->size(100)->color(255,0,255)->generate('Hello,LaravelAcademy!',public_path('qrcodes/qrcode.png'));

生成的二維碼圖片如下:

在Laravel中使用Simple Qrcode生成二維碼

此外,還可以使用 backgroundColor() 方法修改背景色:

QrCode::format('png')->size(100)->color(255,0,255)->backgroundColor(255,255,0)->generate('Hello,LaravelAcademy!',public_path('qrcodes/qrcode.png'));

生成的二維碼圖片如下:

在Laravel中使用Simple Qrcode生成二維碼

修改邊距

如果你想要修改二維碼圖片與最外層容器邊框的距離,可以使用 margin() 方法:

QrCode::format('png')->size(100)->color(255,0,255)->backgroundColor(255,255,0)->margin(100)->generate('Hello,LaravelAcademy!',public_path('qrcodes/qrcode.png'));

生成的二維碼圖片如下:

在Laravel中使用Simple Qrcode生成二維碼

支援編碼

關於編碼問題我們前面已經提到過,即使用 encoding() 方法設定當前編碼,QrCode 預設編碼為 ISO-8859-1,目前支援如下編碼:

字元編碼
ISO-8859-1
ISO-8859-2
ISO-8859-3
ISO-8859-4
ISO-8859-5
ISO-8859-6
ISO-8859-7
ISO-8859-8
ISO-8859-9
ISO-8859-10
ISO-8859-11
ISO-8859-12
ISO-8859-13
ISO-8859-14
ISO-8859-15
ISO-8859-16
SHIFT-JIS
WINDOWS-1250
WINDOWS-1251
WINDOWS-1252
WINDOWS-1256
UTF-16BE
UTF-8
ASCII
GBK
EUC-KR

如果在生成二維碼過程中報錯:

Could not encode content to ISO-8859-1

這就意味著你需要修改編碼了。

合併水印圖片到二維碼

我們有時候需要將 Logo 或者頭像放到二維碼圖片上,這可以通過 merge() 方法實現:

QrCode::format('png')->size(200)->merge('/public/qrcodes/laravel.png',.15)->generate('LaravelAcademy',public_path('qrcodes/qrcode.png'));

merge() 的第一個引數是水印圖片(Logo或頭像)的相對路徑(相對於專案根目錄),第二個引數表示所佔百分比。上述生成的二維碼圖片如下:

在Laravel中使用Simple Qrcode生成二維碼

注:目前 merge() 方法只支援 PNG 格式二維碼圖片。

5、輔助函式

我們平時用到的二維碼不僅僅是顯示文字,而是擁有很多額外功能,比如跳轉連結、支付、下載、關注等等,這些功能可以通過 QrCode 提供的輔助函式來實現。

郵件

email() 函式可以用於生產郵件二維碼, 我們可以傳遞郵箱地址、主題和內容到該函式:

QrCode::email('[email protected]','測試郵件','通過二維碼傳送圖片');

生成的二維碼包含 mailto 資訊。

Geo

geo() 函式可以生成手機可以讀取並在 Google 地圖或類似應用中定位的經度和緯度資訊:

QrCode::geo(37.822214, -122.481769);

電話/手機號碼

phoneNumber() 函式可以生成一個包含手機/手機號碼資訊的二維碼圖片:

QrCode::phoneNumber('18888888888');

簡訊(SMS

SMS() 輔助函式可生成包括收件人和資訊的簡訊二維碼:

QrCode::encoding('UTF-8')->SMS('18888888888','Laravel學院致力於提供優質Laravel中文學習資源');

更多用法

此外,你還可以通過在傳入 generate() 方法的第一個字串引數前新增如下字首以生成對應二維碼:

使用 字首 示例
Website URL http:// http://www.simplesoftware.io
Secured URL https:// https://www.simplesoftware.io
E-mail Address mailto: mailto:[email protected]
Phone Number tel: tel:555-555-5555
Text (SMS) sms: sms:555-555-5555
Text (SMS) With Pretyped Message sms: sms::I am a pretyped message
Text (SMS) With Pretyped Message and Number sms: sms:555-555-5555:I am a pretyped message
Geo Address geo: geo:-78.400364,-85.916993
MeCard mecard: MECARD:Simple, Software;Some Address, Somewhere, 20430;TEL:555-555-5555;EMAIL:[email protected];
Wifi wifi: wifi:WEP/WPA;SSID;PSK;Hidden(True/False)

比如,要生成連結二維碼,可以通過如下方式(我們還修改尺寸以方便掃描):

QrCode::size(200)->generate('http://laravelacademy.org');

6、在 Laravel 之外使用

你還可以在 Laravel 之外使用 Simple QrCode:

use SimpleSoftwareIO\QrCode\BaconQrCodeGenerator;

$qrcode = new BaconQrCodeGenerator;
$qrcode->size(500)->generate('Welcome to LaravelAcademy!');