PHP生成二維碼

參數說明:

 

cht=qr:必要參數,固定值<qr>,表明要生成二維碼

 

chs=<width>x<height>:必要參數,生成二維碼尺寸,單位是像素,目前生成的二維碼都是正方形的,所以兩個寬高值都設置為一樣的值

 

chl=<data>:必要參數,生成二維碼包含的信息,可以是數字、字符、二進制信息、漢字。不能混合數據類型,數據必須經過UTF-8 URL-encoded.如果需要傳遞的信息超過2K個字節,需使用POST方式

 

choe=<output_encoding>:可選參數,編碼格式。包括UTF-8/Shift_JIS/ISO-8859-1三個選項,默認為UTF-8。

 

chld=<error_correction_level>|<margin>:可選參數,

 

  error_correction_level:容錯級別(共分四個等級,L-默認:可以識別已損失的7%的數據;M-可以識別已損失15%的數據;Q-可以識別已損失25%的數據;H-可以識別已損失30%的數據)

 

  margin:生成的二維碼離圖片邊框的距離

 

 

 

例一:掃描二維碼打開網址(API)

 

復制代碼

<?php

//二維碼信息,用urlencode編碼

$data = urlencode('https://www.baidu.com');

//生成二維碼尺寸

$size = '300×300';

//完整的API地址

$qrurl = "https://chart.googleapis.com/chart?chs=$size&cht=qr&chl=$data&chld=L|1&choe=UTF-8";

//獲取二維碼

$qrcode = file_get_contents($qrurl);

//輸出圖片

header('Content-type: image/png');

echo $qrcode;

復制代碼

 在打開一個網站之後,我們要來實現歸初的目的,掃描二維碼,將企業信息導入通訊錄,即在二維碼中包含一個名片信息,其實二維碼說白瞭就是將一堆信息轉換為圖片的形式表達,而這堆信息到底是什麼樣子的它並不關心,真正關心這些信息的是掃描二維碼的工具,以上面的例子來說,當你用微信掃描二維碼後,微信讀取到二維碼中儲存的數據,然後嘗試開始辨別它,當它發現內容是百度的網址時便使用瀏覽器打開它,同樣的當它發現內容是一堆簡單的文本數據時便以文本的形式來顯示,同樣的微信還可以辨別出二維碼的內容是不是一個 vcard 格式的電子名片,我們的手機通訊錄導入導出的時候大多是這種格式,所以我們可以直接在二維碼中包含一個標準的 vcard 電子名片,這樣就可以讓掃描工具將它識別為通訊錄。

 

復制代碼

vcard 格式參考如下:

 

BEGIN:VCARD

VERSION:3.0

FN:用戶名

TEL;CELL;VOICE:18858140621

TEL;WORK;VOICE:0358-2157466

TEL;WORK;FAX:0358-2157466

EMAIL;PREF;INTERNET:lzw#lzw.me

URL:https://lzw.me

orG:志文工作室

ROLE:產品部

TITLE:CTO

ADR;WORK;POSTAL:北京市朝陽區北四環中路35號;100101

REV:2012-12-27T08:30:02Z

END:VCARD

    

如果你想更詳細的定制所需要的格式,請百度 vcard 的格式標準。

復制代碼

 例二:生成一個名片二維碼(API)

 

復制代碼

<?php

//構建一個 vcard 格式數據

$vcard = 

    "BEGIN:VCARD".

    "\nVERSION:3.0".

    "\nFN:小編絡絡".

    "\nTEL;CELL;VOICE:18858140621".

    "\nTEL;WORK;VOICE:0358-2157466".

    "\nEMAIL:luoluo@qq.com".

    "\nURL:https://www.baidu.com".

    "\nADR:浙江省杭州市濱江區".

    "\nEND:VCARD";

 

//二維碼信息,用urlencode編碼

$data = urlencode($vcard);

//生成二維碼尺寸

$size = '300×300';

//完整的API地址

$qrurl = "https://chart.googleapis.com/chart?chs=$size&cht=qr&chl=$data&chld=L|1&choe=UTF-8";

//獲取二維碼

$qrcode = file_get_contents($qrurl);

//輸出圖片

header('Content-type: image/png');

echo $qrcode;

復制代碼

 到此為止我們歸初的目的已經基本實現,但實際使用中,由於直接將上述拼裝好的 url 加到瞭 img 標簽的 src 屬性,結果出瞭點小問題,由於我們的名片信息比較多,導致瞭二維碼生成錯誤,在本文開頭已經用紅色字體標出,get 方式最多隻能傳遞 2K 大的數據,大於 2K 數據時我們需要使用 POST 請求,所以在實際使用中,可以先在程式中通過 POST 方式獲取二維碼並保存為本地圖片,之後直接調用本地圖片即可。

 

 

 

方法二:使用 PHP QR CODE 生成二維碼

 

官方主頁:https://phpqrcode.sourceforge.net

 

下載地址:https://sourceforge.net/projects/phpqrcode/

 

使用方法:QRcode::png($data, $filename , $errorCorrectionLevel, $matrixPointSize, $margin );

 

    * $data 數據   

    * $filename 生成二維碼保存路徑,如果為 false 直接輸出到瀏覽器  

    *$errorCorrectionLevel 錯誤處理級別  L、M、Q、H;同谷歌 API 中糾錯級別

    * $matrixPointSize 每個黑點的像素   

    * $margin 圖片外圍的白色邊框像素

 

 

 

例三:掃描二維碼打開網址(phpqrcode)

 

復制代碼

<?php

 

// 包含 qrlib.php 或 phpqrcode.php 

// 包含 qrlib.php 需要同其它文件放到一起; phpqrcode.php 是合並後版本,隻需要包含這個文件,但生成的圖片速度慢而且不太準確

include('./phpqrcode/qrlib.php');

 

// 二維碼數據

$data = 'https://www.111cn.net';

 

// 糾錯級別:L、M、Q、H

$errorCorrectionLevel = 'L';

 

// 點的大小:1到10

$matrixPointSize = 5;

 

QRcode::png($data, false, $errorCorrectionLevel, $matrixPointSize, 2);

復制代碼

 

 

 例二:生成一個名片二維碼(phpqrcode)

 

復制代碼

<?php

// 包含 qrlib.php 或 phpqrcode.php

include('./phpqrcode/qrlib.php');

// 構建 vcard 數據

$vcard = 

    "BEGIN:VCARD".

    "\nVERSION:3.0".

    "\nFN:王歌".

    "\nTEL;CELL;VOICE:18858140621".

    "\nTEL;WORK;VOICE:0358-2157466".

    "\nEMAIL:wang@qq.com".

    "\nURL:https://www.mailuow.com".

    "\nADR:浙江省杭州市濱江區江虹路1750號".

    "\nEND:VCARD";

 

// 糾錯級別:L、M、Q、H

$errorCorrectionLevel = 'L';

 

// 點的大小:1到10

$matrixPointSize = 4;

 

QRcode::png($vcard, false, $errorCorrectionLevel, $matrixPointSize, 2);

 

  

You May Also Like