ThinkPHP框架發展到今天功能已經變得是非常強大了,但是ThinkPHP框架中沒有二維碼相關的庫,因此我們可以通過整合phpqrcode來完成生成二維碼的功能。想使用phpqrcode首先就要把phpqrcode代碼包下載下來,大家可以去官網下載,也可以在網絡上搜索進行下載,這里我為大家提供的有一份 phpqrcode代碼包。下載地址:phpqrcode代碼包。
下面開始講述如何在ThinkPHP框架中整合phpqrcode生成二維碼,這是我已經整合好的樣例,感興趣的可以下載下來進行學習。
1、將phpqrcode整合到ThinkPHP框架
在“ThinkPHP\Library\Vendor\”下新建目錄phpqrcode,將phpqrcode代碼壓縮包內容解壓到該文件夾下。
2、調用phpqrcode生成二維碼
在控制器下或者在“/Application/Common/Common/function.php”添加如下函數方法(本人是在控制器中寫的):
訪問:http://127.0.0.1/thinkphp_phpqrcode/index.php/Home/Index/qrcode 即可看到二維碼
- /**
- * 調用phpqrcode生成二維碼
- * @param string $url 二維碼解析的地址
- * @param int $level 二維碼容錯級別
- * @param int $size 需要生成的圖片大小
- */
- public function qrcode($url = "http://blog.csdn.net/zhihua_w", $level = 3, $size = 4)
- {
- Vendor('phpqrcode.phpqrcode');
- //容錯級別
- $errorCorrectionLevel = intval($level);
- //生成圖片大小
- $matrixPointSize = intval($size);
- //生成二維碼圖片
- $object = new \QRcode();
- //第二個參數false的意思是不生成圖片文件,如果你寫上‘picture.png’則會在根目錄下生成一個png格式的圖片文件
- $object->png($url, false, $errorCorrectionLevel, $matrixPointSize, 2);
- }
到這里已經可以生成二維碼了;如果想對二維碼更加個性化定制的話下面具體說一下png() 函數的使用。
- png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false, $back_color = 0xFFFFFF, $fore_color = 0x000000);
① 第一個參數$text:就是上面代碼里的URL網址參數;
② 第二個參數$outfile:默認為否;不生成文件;只將二維碼圖片返回;否則需要給出存放生成二維碼圖片的路徑;
③ 第三個參數$level:默認為L;這個參數可傳遞的值分別是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%);這個參數控制二維碼容錯率;不同的參數表示二維碼可被覆蓋的區域百分比。利用二維維碼的容錯率;我們可以將頭像放置在生成的二維碼圖片任何區域;
④ 第四個參數$size:控制生成圖片的大小;默認為4;
⑤ 第五個參數$margin:控制生成二維碼的空白區域大小;
⑥ 第六個參數$saveandprint:保存二維碼圖片並顯示出來;$outfile必須傳遞圖片路徑;
⑦ 第七個參數$back_color:背景顏色;
⑧ 第八個參數$fore_color:繪制二維碼的顏色;
注:第七、第八個參數需要傳16進制是色值;並且要把“#”替換為“0x”
例如:
白色:#FFFFFF => 0xFFFFFF
黑色:#000000 => 0x000000如果想了解更多用法,可以直接參考官方網站源代碼了;http://phpqrcode.sourceforge.net/
3、生成帶logo的二維碼
在控制器下或者在“/Application/Common/Common/function.php”添加如下函數方法(本人是在控制器中寫的):
- /**
- * 生成帶logo的二維碼圖片
- */
- public function qrcodeWithPicture()
- {
- Vendor('phpqrcode.phpqrcode');
- $object = new \QRcode();
- //二維碼內容
- $url = 'http://blog.csdn.net/zhihua_w';
- //容錯級別
- $errorCorrectionLevel = 'L';
- //生成圖片大小
- $matrixPointSize = 6;
- //生成一個二維碼圖片
- $object->png($url, 'zhihua_w.png', $errorCorrectionLevel, $matrixPointSize, 2);
- //准備好的logo圖片,本人放在了根目錄下
- $logo = 'logo.png';
- //已經生成的原始二維碼圖,也在根目錄下
- $qrcode = 'zhihua_w.png';
- //logo圖片存在
- if ($logo !== FALSE) {
- $qrcode = imagecreatefromstring(file_get_contents($qrcode));
- $logo = imagecreatefromstring(file_get_contents($logo));
- $qrcode_width = imagesx($qrcode); //二維碼圖片寬度
- $qrcode_height = imagesy($qrcode); //二維碼圖片高度
- $logo_width = imagesx($logo); //logo圖片寬度
- $logo_height = imagesy($logo); //logo圖片高度
- $logo_qr_width = $qrcode_width / 5;
- $scale = $logo_width / $logo_qr_width;
- $logo_qr_height = $logo_height / $scale;
- $from_width = ($qrcode_width - $logo_qr_width) / 2;
- //重新組合圖片並調整大小
- imagecopyresampled($qrcode, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,
- $logo_qr_height, $logo_width, $logo_height);
- }
- //輸出圖片
- imagepng($qrcode, 'zhihua_w_logo.png');
- echo '<img src="http://127.0.0.1/thinkphp_phpqrcode/zhihua_w_logo.png">';
- }
方法思路:先調用phpqrcode生成一張二維碼,再使用php的image相關函數將logo圖片添加到生成的二維碼圖片上。
至此,此項目完滿結束!