前言
由於團隊功能需要,我們需要用php做一個能根據我們的給定的URL產生二維碼的action,過程曲折,做出來之後在這裡總結一下。
開始入手
開始的時候,走了錯誤的方向,當時的想法:既然要生成二維碼,那就要知道二維碼的生成機制,於是我在網上搜二維碼,得到瞭如下結果:
我粗略读了一遍之后顿悟: 显然,这不是我想要的(如果研究这东西,估计未来几周不用干别的了)
步入正軌
我雖然走錯了方向,但是也簡單的了解了二維碼這個東西,那麼我們需要的功能該如何實現呢?這次我決定簡單粗暴一點
Google誠不欺我,在我之前已經有人寫好了這些個功能,於是我開始步入正軌。
整體思路
- 我們需要的功能在網路上已經有人用php寫好了,就像我們引用think裡面的函式庫一樣,我們只要把網路上能產生二維碼的庫下載下來,然後引用它,就能快速方便的生成二維碼了。思路確定了,開始工作。
筆者發現了兩種方法,最後使用了第二種
方法一:Composer與endroid/QrCode
- 提到php下載第三方庫,就必須提到composer了,這是php的一個賊厲害的庫管理工具,可以幫助我們下載網上的其他類庫,關於這個神奇的東西,官方文檔當中也有介紹(如下圖)
- 目前筆者用的是windows環境,按照官方文件當中的連結下載好,開始快樂的一路next,然後問題就來了
這是我在網路上找到的照片(源自菜鳥教學:composer安裝),我安裝的時候,並沒有地址出現,於是我就懵了,這是什麼意思?
思考了一下,我們安裝的這個管理工具是和php聯繫的,並且需要找到菜鳥教程圖片當中的php.exe文件,於是引出了下面的問題:php在哪裡?
-
XAMPP
百度百科:XAMPP(Apache MySQL PHP PERL)是一個功能強大的網站整合軟體套件。由此可知,我們使用的xampp裡面整合了php,下一步,開始找文件
找到文件,安装完成,在我们的thinphp5文件夹下,输入指令来安装好第三方库 $ composer require endroid/qr-code
這樣,我們的函式庫文件就載入完畢,進行程式碼開發的話,大家可以參考這篇部落格
http://www.cnbreak.org/biancheng/thinkphp5/wechatwebpage/760.html
#方法二:利用phpqrcode
筆者用的是這個方法,用起來也相對簡單(不過在thinkphp6貌似沒辦法使用了),我們在網上直接下載第三方庫
下載鏈接https:// sourceforge.net/projects/phpqrcode/files/releases
官方說明文件http://phpqrcode.sourceforge.net/docs/html/annotated.html
#下載完成後
#注意:一定要是extends目錄
我們用composer下載好的函式庫在vender裡面,外面下載的第三方函式庫只有放在extends裡面才會運作。
如下是第二種方法的程式碼
function qrcode($level = 'L', $size = 4){ // 导入Phpqrcode插件文件require_once EXTEND_PATH.'phpqrcode/phpqrcode.php'; //设置url $url1 = 'https://www.baidu.com/s?wd=666&rsv_spt=1&rsv_iqid=0xfea0cab90000241d&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=ib&rsv_sug3=4&rsv_sug1=3&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=528&rsv_sug4=1203'; // 容错级别 $errorCorrectionLevel = $level; // 生成图片大小 $matrixPointSize = intval($size); // 生成二维码图片 $object = new QRcode(); // 这个一定要加上,清除缓冲区 ob_end_clean(); // 第二个参数false的意思是不生成图片文件,如果你写上‘picture.png’则会在根目录下生成一个png格式的图片文件 $object->png($url1, false, $errorCorrectionLevel, $matrixPointSize, 2); }
相關參數的意思:
- $text 是url參數
- $outfile 預設否,不產生文件,只回傳二維碼圖片,否則需要給儲存路徑
- $level 二維碼容錯率,預設L(7%)、M(15%)、Q(25%)、H(30%)
- $size 二維碼圖片大小,預設4
- $ margin 二維碼空白區域大小
- $saveabdprint 二維碼儲存並顯示,$outfile必須傳路徑
- $back_color 背景顏色
- $fore_color 繪製二維碼的顏色
- tip:顏色必須傳16進位的色值,並把「#」替換為「0x」; 如#FFFFFF => 0xFFFFFF
#總結
我們想要實現一個功能的時候,一般來說在我們之前都會有人已經寫出這個東西來了,首先自己去研究這個功能的實現思路,然後去想辦法,找到相關的文檔方法,就可以實現功能了。