參數說明: 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('http://www.baidu.com'); //生成二維碼尺寸 $size = '300x300'; //完整的API地址 $qrurl = "http://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:http://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:[email protected]". "\nURL:http://www.baidu.com". "\nADR:浙江省杭州市濱江區". "\nEND:VCARD"; //二維碼信息,用urlencode編碼 $data = urlencode($vcard); //生成二維碼尺寸 $size = '300x300'; //完整的API地址 $qrurl = "http://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 生成二維碼 官方主頁:http://phpqrcode.sourceforge.net 下載地址:http://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 = 'http://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:[email protected]". "\nURL:http://www.mailuow.com". "\nADR:浙江省杭州市濱江區江虹路1750號". "\nEND:VCARD"; // 糾錯級別:L、M、Q、H $errorCorrectionLevel = 'L'; // 點的大小:1到10 $matrixPointSize = 4; QRcode::png($vcard, false, $errorCorrectionLevel, $matrixPointSize, 2);