PHP 生成、識別二維碼及安裝相關擴充套件/工具
2018-02-20 00:30:26 更新:推薦新擴充套件(極力推薦)
這篇文章裡用的兩個二維碼擴充套件都有些問題和麻煩:phpqrcode(生成二維碼)的原始碼有點小 bug; 而 php-zbarcode(識別二維碼)需要其他開源套件和擴充套件模組的支援,編譯起來很容易出問題,只支援 php5,而且 3 年多沒維護,目測作者已放棄。對於不愛折騰開發環境的人太不方便。在 github 找到兩個擴充套件,本人推薦:
- endroid/qrcode: 生成二維碼,第三方包,支援 Composer。ReadMe 裡有簡明的 Demo,可以快速上手。不再另說了。
- php-qrcode-detector-decoder
2018-02-04 23:28:30 更新:使用 apt 安裝 zbar
編譯安裝 zbar 還是有毛病,很容易出問題。Ubuntu 官方源有個 zbar-tools,也就是 zbar。推薦朋友們用 apt 安裝,一條命令搞定:
sudo apt-get install zbar-tools
我的系統是 Ubuntu 17.10.1,官方源有 zbar-tools,所以直接裝了。裝好 zbar 之後就可以使用 zbarimg path/to/your_qrcode.png
一、php 生成 qr code 二維碼
phpqrcode 是由 php 編寫的、可以生成 QR Code 二維碼的第三方包。官網有很多例子可以參考,使用起來很簡單,2 行程式碼。
<?php // 1. 使用官網包 require './phpqrcode/qrlib.php'; QRcode::png('http://github.com', 'qrcode.png', QR_ECLEVEL_L, 8, 4, false); // 該方法的最後一個引數有Bug,寫 TRUE 時(儲存並列印)並不會列印顯示,需要修改原始碼 // QRcode::png('123', './qrcode.png', QR_ECLEVEL_L, 4, 4, TRUE); // 2. 使用composer包 // aferrandini/phpqrcode 這個包在packagist.org上排名第一,是根據官網打包的,不過Bug似乎也好好的在那兒~~。 // 其他類似的composer包還有很多,按需求找吧~~
二、jquery 生成 qr code 二維碼
jquery.qrcode.js 是前端生成 QR Code 二維碼的外掛庫。下面是我參考 jquery.qrcode.js 在 github 倉庫上一個 example 寫的。看程式碼。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>QR Code</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script> <script type="text/javascript" src="./js/jquery.qrcode.js"></script> <script type="text/javascript" src="./js/qrcode.js"></script> </head> <body> <p>快速渲染:</p> <div id="qrcode"></div> <p>table渲染:</p> <div id="qrcodeTable"></div> <p>canvas渲染:</p> <div id="qrcodeCanvas"></div> <p>設定寬高:</p> <div id="qrcodeResize"></div> <!-- -------------------------------------------------------- --> <script> // 快速渲染 $('#qrcode').qrcode("http://github.com"); // table渲染 $('#qrcodeTable').qrcode({ render : "table", text : "http://github.com" }); // canvas渲染 $('#qrcodeCanvas').qrcode({ render : "canvas", text : "http://github.com" }); // 設定寬高 $('#qrcodeResize').qrcode({ width : 128, height : 128, text : "http://github.com" }); </script> </body> </html>
然後瀏覽器訪問這個頁面,就能看到 4 個二維碼了。
注意一下:
- 總之,現在記下這篇文件的時候,按照官網和 github 還有其他一些部落格上的說明都只加載了 jquery.qrcode.js (query.js 除外),但是隻載入這一個 jQ 的話我這裡行不通,必須再載入 qrcode.js
- jQ 生成 QR Code 的程式碼必需在容器元素後面,可以放在 <body> 標籤內最後。如果放在<head>標籤中也生不出來 QR Code。這是 github上的一個例子。
三、php 生成電子名片
1. vCard
vCard 是電子名片的檔案格式標準。它一般附加在電子郵件之後,但也可以用於其它場合(如在網際網路上相互交換)。vCard 可包含的資訊有:姓名、地址資訊、電話號碼、URL,logo,相片等(摘自維基百科)。
2. 樣例
下面是一個包含個人資訊的 vCard 格式電子名片(摘自維基百科),可以參照它來修改:
BEGIN:VCARD VERSION:2.1 N:Gump;Forrest FN:Forrest Gump ORG:Gump Shrimp Co. TITLE:Shrimp Man TEL;WORK;VOICE:(111) 555-1212 TEL;HOME;VOICE:(404) 555-1212 ADR;WORK:;;100 Waters Edge;Baytown;LA;30314;United States of America LABEL;WORK;ENCODING=QUOTED-PRINTABLE:100 Waters Edge=0D=0ABaytown, LA 30314=0D=0AUnited States of America ADR;HOME:;;42 Plantation St.;Baytown;LA;30314;United States of America LABEL;HOME;ENCODING=QUOTED-PRINTABLE:42 Plantation St.=0D=0ABaytown, LA 30314=0D=0AUnited States of America EMAIL;PREF;INTERNET:[email protected] REV:20080424T195243Z END:VCARD
參考上面的 vCard 樣例,可以製作個人的電子名片。具體的各個欄位解釋可以參考百度百科上的 vCard 介紹。
3. php 生成電子名片
照樣子寫一個,使用 phpqrcode 包來生成我的電子名片:
<?php // 使用 phpqrcode 生成電子名片 require './phpqrcode/qrlib.php'; $vcard = <<<EOL BEGIN:VCARD VERSION:2.1 N:Jin;mingc FN:mingc ORG:free man TITLE:PHPer TEL;WORK;VOICE:1382173xxxx TEL;HOME;VOICE:1383284xxxx ADR;WORK;TianJin, China LABEL;WORK;ENCODING=QUOTED-PRINTABLE:TianJin, China(LABEL;WORK) ADR;HOME;TianJin, China LABEL;HOME;ENCODING=QUOTED-PRINTABLE:TianJin, China(LABEL;HOME) EMAIL;PREF;INTERNET:[email protected] REV:20171201T005548Z END:VCARD EOL; QRcode::png($vcard); // define('EOL', "\r\n"); // $vcard = 'BEGIN:VCARD'.EOL; // $vcard .= 'VERSION:2.1'.EOL; // $vcard .= 'N:Jin;mingc'.EOL; // $vcard .= 'FN:mingc'.EOL; // $vcard .= 'ORG:free man'.EOL; // $vcard .= 'TITLE:PHPer'.EOL; // $vcard .= 'TEL;WORK;VOICE:1382173xxxx'.EOL; // $vcard .= 'TEL;HOME;VOICE:1383284xxxx'.EOL; // $vcard .= 'ADR;WORK;TianJin, China'.EOL; // $vcard .= 'LABEL;WORK;ENCODING=QUOTED-PRINTABLE:TianJin, China(LABEL;WORK)'.EOL; // $vcard .= 'ADR;HOME;TianJin, China'.EOL; // $vcard .= 'LABEL;HOME;ENCODING=QUOTED-PRINTABLE:TianJin, China(LABEL;HOME)'.EOL; // $vcard .= 'EMAIL;PREF;INTERNET:[email protected]'.EOL; // $vcard .= 'REV:20171201T005548Z'.EOL; // $vcard .= 'END:VCARD'; // QRcode::png($vcard);
瀏覽器訪問這個 php 指令碼會顯示一張二維碼,微信掃一掃,結果如下:
這個電子名片還可以直接新增到你的手機聯絡人裡。
四、php 識別二維碼(工具)
php 識別二維碼或條形碼需要 3 個工具。
ImageMagick 是一個用於檢視、編輯點陣圖檔案以及進行影象格式轉換的開放原始碼軟體套裝。它可以讀取、編輯超過 100 種圖象格式。ImageMagick 以 ImageMagick 許可證(一個類似 BSD 的許可證)釋出。
2. zbar
zbar 是一個開源軟體套件,用於讀取各種來源的條形碼,如視訊流,影象檔案和原始強度感測器。它支援 包括 EAN-13 / UPC-A,UPC-E,EAN-8,Code 128,Code 39,Interleaved 2 of 5 和 QR Code 等多種流行的條碼。
php-zbarcode是 PHP 讀取條形碼的擴充套件模組,目前僅支援 php5.x。使用這個模組之前還需要安裝 ImageMagick 和 zbar 這兩個命令列套件。
phpzbarcode 依賴於 ImageMagick 和 zbar,zbar 依賴於 ImageMagick,ImageMagick 依賴 jpeg 庫來提供 jpeg 圖片支援,所以先安裝 jpeg 支援。
安裝 jpeg 庫
wget http://www.imagemagick.org/download/delegates/jpegsrc.v9b.tar.gz tar xf jpegsrc.v9b.tar.gz cd jpeg-9b/ ./configure make sudo make install
五、安裝 ImageMagick
wget https://www.imagemagick.org/download/ImageMagick.tar.gz tar xf ImageMagick.tar.gz cd ImageMagick-7.0.7-13 ./configure make sudo make install sudo ldconfig /usr/local/lib magick --version
********************************************* 常見錯誤 *******************************************
出錯1:安裝好以後使用 magick 、 convert 等相關命令時,載入動態連結庫出錯
convert: error while loading shared libraries: libMagickCore-7.Q16HDRI.so.4: cannot open shared object file: No such file or directory
解決方法:設定動態載入動態連結庫
sudo ldconfig /usr/local/lib
然後就可以正常使用命令列介面了。
六、安裝 zbar
tar xf zbar-0.10.tar.gz cd zbar-0.10/ sudo ln -s /usr/local/include/ImageMagick-7 /usr/local/include/ImageMagick sudo ln -s /usr/local/include/ImageMagick-7/MagickWand /usr/local/include/wand ./configure --disable-video --without-gtk --without-qt --without-python make make sudo make install zbarimg --version
********************************************* 常見錯誤 ********************************************
出錯1:找不到 MagickWand.h 標頭檔案
ImageMagick package found but wand/MagickWand.h not installed?! -this is a problem with your ImageMagick install, -please resolve the inconsistency and try again...
解決方法:zbar 的配置檔案 ./configure 在執行時會找不到 MagickWand.h,它在 /usr/local/include/ImageMagick-7/MagickWand 目錄下,但是 ./configure 執行時會去 wand/ 目錄找(找不到),所以需要做兩個軟連線讓 ./configure 能找到 MagickWand.h 檔案
sudo ln -s /usr/local/include/ImageMagick-7 /usr/local/include/ImageMagick sudo ln -s /usr/local/include/ImageMagick-7/MagickWand /usr/local/include/wand
出錯2:make 編譯期間多處 warning 和 error
zbar/decoder/ean.c: In function ‘ean_part_end4’: zbar/decoder/ean.c:245:13: warning: logical not is only applied to the left hand side of comparison [-Wlogical-not-parentheses] if(!par == fwd) { ^~ zbar/decoder/ean.c:245:8: note: add parentheses around left hand side expression to silence this warning if(!par == fwd) { ^~~~ ( ) zbar/decoder/ean.c: In function ‘ean_part_end7’: zbar/decoder/ean.c:294:13: warning: logical not is only applied to the left hand side of comparison [-Wlogical-not-parentheses] if(!par == fwd) { ^~ zbar/decoder/ean.c:294:8: note: add parentheses around left hand side expression to silence this warning if(!par == fwd) { ^~~~ ( ) zbar/qrcode/qrdec.c: In function ‘qr_finder_quick_crossing_check’: zbar/qrcode/qrdec.c:1215:27: warning: logical not is only applied to the left hand side of comparison [-Wlogical-not-parentheses] if(!_img[_y0*_width+_x0]!=_v||!_img[_y1*_width+_x1]!=_v)return 1; ^~ zbar/qrcode/qrdec.c:1215:6: note: add parentheses around left hand side expression to silence this warning if(!_img[_y0*_width+_x0]!=_v||!_img[_y1*_width+_x1]!=_v)return 1; ^~~~~~~~~~~~~~~~~~~~~ ( ) zbar/qrcode/qrdec.c:1215:54: warning: logical not is only applied to the left hand side of comparison [-Wlogical-not-parentheses] if(!_img[_y0*_width+_x0]!=_v||!_img[_y1*_width+_x1]!=_v)return 1; ^~ zbar/qrcode/qrdec.c:1215:33: note: add parentheses around left hand side expression to silence this warning if(!_img[_y0*_width+_x0]!=_v||!_img[_y1*_width+_x1]!=_v)return 1; ^~~~~~~~~~~~~~~~~~~~~ ( ) zbar/qrcode/qrdec.c:1216:45: warning: logical not is only applied to the left hand side of comparison [-Wlogical-not-parentheses] if(!_img[(_y0+_y1>>1)*_width+(_x0+_x1>>1)]==_v)return -1; ^~ zbar/qrcode/qrdec.c:1216:6: note: add parentheses around left hand side expression to silence this warning if(!_img[(_y0+_y1>>1)*_width+(_x0+_x1>>1)]==_v)return -1; ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ( ) zbar/qrcode/qrdec.c: In function ‘qr_finder_locate_crossing’: zbar/qrcode/qrdec.c:1257:33: warning: logical not is only applied to the left hand side of comparison [-Wlogical-not-parentheses] if(!_img[x0[1]*_width+x0[0]]!=_v)break; ^~ zbar/qrcode/qrdec.c:1257:8: note: add parentheses around left hand side expression to silence this warning if(!_img[x0[1]*_width+x0[0]]!=_v)break; ^~~~~~~~~~~~~~~~~~~~~~~~~ ( ) zbar/qrcode/qrdec.c:1269:33: warning: logical not is only applied to the left hand side of comparison [-Wlogical-not-parentheses] if(!_img[x1[1]*_width+x1[0]]!=_v)break; ^~ zbar/qrcode/qrdec.c:1269:8: note: add parentheses around left hand side expression to silence this warning if(!_img[x1[1]*_width+x1[0]]!=_v)break; ^~~~~~~~~~~~~~~~~~~~~~~~~ ( ) zbar/jpeg.c: In function ‘_zbar_convert_jpeg_to_y’: zbar/jpeg.c:174:39: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types] cinfo->src->fill_input_buffer = fill_input_buffer; ^
解決方法:再次編譯
make
七、安裝 php-zbarcode
wget https://github.com/mkoppanen/php-zbarcode/archive/master.zip unzip master.zip cd php-zbarcode-master/ phpize ./configure --with-php-config=/usr/bin/php-config make sudo make install
成功後會提示安裝到的模組目錄
Installing shared extensions: /usr/lib/php/20131226/
確認模組的位置
[email protected]:~/Downloads/qrcode/php-zbarcode-master$ ls /usr/lib/php/20131226/ build dom.so gettext.so mcrypt.so mysqli.so pdo_mysql.so posix.so sockets.so tokenizer.so xmlwriter.so bz2.so exif.so iconv.so memcached.so mysqlnd.so pdo_odbc.so readline.so sqlite3.so wddx.so xsl.so calendar.so fileinfo.so igbinary.so memcache.so mysql.so pdo.so redis.so sysvmsg.so xmlreader.so zbarcode.so ctype.so ftp.so json.so mongo.so odbc.so pdo_sqlite.so shmop.so sysvsem.so xmlrpc.so zip.so dba.so gd.so mbstring.so msgpack.so opcache.so phar.so simplexml.so sysvshm.so xml.so
可以看到有了 zbarcode.so 檔案。然後啟用 zbarcode 擴充套件,編輯 /etc/php/5.6/apache2/php.ini 檔案
sudo vim /etc/php/5.6/apache2/php.ini
最後新增一行
extension=zbarcode.so
重啟 apache
sudo /etc/init.d/apache2 restart
這就好了,可以使用條形碼擴充套件了。
注意 php -m 命令顯示的是 php-cli 模式啟用的擴充套件,要讓 php-cli 模式也啟用擴充套件的話,需要再編輯 cli 模式的配置檔案。在 /etc/php/5.6/cli/php.ini 裡,最後新增一行
extension=zbarcode.so
然後就能使用 php -m 命令看到 zbarcode 模組了。
八、php 識別二維碼
參照 github 上的 php-zbarcode 示例,識別一下我剛才生成的電子名片。
<?php /* Create new image object */ $image = new ZBarCodeImage("./qrcode_vcard.png"); /* Create a barcode scanner */ $scanner = new ZBarCodeScanner(); /* Scan the image */ $barcode = $scanner->scan($image); /* Loop through possible barcodes */ if (!empty($barcode)) { foreach ($barcode as $code) { printf("Found type %s barcode with data %s\n", $code['type'], $code['data']); } }
識別結果:
Found type QR-Code barcode with data BEGIN:VCARD VERSION:2.1 N:Jin;mingc FN:mingc ORG:free man TITLE:PHPer TEL;WORK;VOICE:1382173xxxx TEL;HOME;VOICE:1383284xxxx ADR;WORK;TianJin, China LABEL;WORK;ENCODING=QUOTED-PRINTABLE:TianJin, China(LABEL;WORK) ADR;HOME;TianJin, China LABEL;HOME;ENCODING=QUOTED-PRINTABLE:TianJin, China(LABEL;HOME) EMAIL;PREF;INTERNET:[email protected] REV:20171201T005548Z END:VCARD
九、參考連結
相關推薦
PHP 生成、識別二維碼及安裝相關擴充套件/工具
2018-02-20 00:30:26 更新:推薦新擴充套件(極力推薦) 這篇文章裡用的兩個二維碼擴充套件都有些問題和麻煩:phpqrcode(生成二維碼)的原始碼有點小 bug; 而 php-zbarcode(識別二維碼)需要其他開源套件和擴充套件模組的支援,編譯起來很容易出問題,只支援 php5,而且
PHP 生成、識別二維碼
play github 開源軟件 eve tps sage compose example 電子郵件 溫馨提示:經過這 2 天的折騰,我卸載了 php7.1。原因只有一個——我要安裝的條形碼擴展模塊 php-zbarcode 的 c 語言源代碼不支持
go隨聊-生成、識別二維碼
QRCode QR Code碼,是由Denso公司於1994年9月研製的一種矩陣二維碼符號,它具有一維條碼及其它二維條碼所具有的資訊容量大、可靠性高、可表示漢字及圖象多種文字資訊、保密防偽性強等優點。 生成二維碼 skip2/
C# ZXing.Net生成二維碼、識別二維碼、生成帶Logo的二維碼(一)
tree bit 字符串 單位 images j2se lba 支付 .net 一.ZXing.Net 源代碼地址:http://zxingnet.codeplex.com/ 也可以使用Nuget包管理,添加如圖: 說明:ZXing是一個開源Java類庫用於解析多種格式的
Android Zxing3.3.2掃描、生成、解析二維碼,以及近距離無法識別的問題
Zxing目前最新版本3.3.2,開啟攝像頭就成功了,真正的極速掃描,效果喜人。一、整合流程1、克隆程式碼就不說了。2、zxing專案巨大,我們只需要掃描部分的程式碼。將android、android-core、core目錄程式碼以及資源拷貝到專案目錄下。所有類都需要修改引用
java利用qrcode.jar進行處理二維碼,生成、解析二維碼
首先,這裡貼出jar。 生成二維碼: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
PHP -- 用TP5實現二維碼和logo的生成與設定及路徑儲存等
本文利用TP5實現二維碼的生成與設定,logo的新增與設定。 1. 利用 composer 獲取 qr_code 外掛 composer require endroid/qr-code 我用的編譯器是PhpStorm ,所以在下面的Terminal中可以輸入以上命令即可。如下圖:
長按識別二維碼微信喚起喚醒跳轉任意url網站地址技術ticket生成規則介面加密php
相信很多朋友遇到過有些網站,可以直接通過一個連線就能讓你的手機開啟微信且跳轉到某個指定的頁面,許多程式設計師很好奇到底是怎麼實現的,到處求這種方法的原始碼,在文字中我會介紹及剖析這種跳轉實現的原理。 微信是個比較封閉的環境,至於為什麼封閉,相信大家都瞭解,在一些應用場景中,我們要用到外部瀏覽器跳
QRCode 掃描二維碼、掃描條形碼、相簿獲取圖片後識別、生成帶 Logo 二維碼、支援微博微信 QQ 二維碼掃描樣式
目錄功能介紹根據之前公司的產品需求,參考 barcodescanner 改的,希望能幫助到有生成二維碼、掃描二維碼、識別圖片二維碼等需求的猿友。修改幅度較大,也就沒準備針對 barcodescanner 庫提交PR。 ZXing 生成可自定義顏色、帶 logo 的二維碼 ZX
PHP生成二維碼與識別二維碼
<?php /** * Created by PhpStorm. * User: user * Date: 2018/8/16 * Time: 10:43 */ include "./qrcode/phpqrcode.php"; $txt = "測試內容"; $picPathAndName =
Android開源庫之使用ZXing開源庫生成二維碼及識別本地二維碼圖片
/** * 解析二維碼(使用解析RGB編碼資料的方式) * * @param path * @return */ public static Result decodeBarcodeRGB(String path) { if (Text
PHP生成二維碼和識別二維碼
<1>PHP生成二維碼 QR Code是一個PHP二維碼生成類庫,利用它可以輕鬆生成二維碼,下載官網提供的類庫後,只需要引入phpqrcode.php就可以生成二維碼 程式碼例項如下: function setCode($url){ $data
關於生成二維碼及生成二維碼引數的傳入,配置檔案的定義、呼叫,computed屬性的計算,
1,二維碼的生成(其中一個生成方法),由伺服器提供一個url, 後端提供一個url,兩個url拼接到一個img標籤內,如圖: &
基於PHP類庫PHPqrCode生成帶LOGO二維碼
PHPqrCode是一個PHP二維碼生成類庫,利用它可以輕鬆生成二維碼,官網提供了下載和多個演示demo,檢視地址:http://phpqrcode.sourceforge.net/。下載官網提供的類庫後,只需要使用phpqrcode.php就可以生成二維碼了,當然您的PHP環境必須開啟支援GD2。
php識別二維碼和條形碼
使用php-zxing,github地址:https://github.com/dsiddharth2/php-zxing 在使用之前先確保已安裝java環境 另外參考連結: https://blog.csdn.net/mrwangweijin/article/details/79145
微信引流活動:生成帶參二維碼、傳送海報、
參加活動-生成帶引數二維碼-將二維碼與海報進行合併-推動給客戶-客戶分享到朋友圈-朋友圈裡朋友通過二維碼關注公眾號-再次生成二維碼海報-迴圈往復-引流! 程式碼實現: 1.獲取臨時二維碼ticket /// <summa
建立及呼叫基於QT5 QML的 DLL(舉例QML中使用QZXing識別二維碼)
1. 概述 Qt Quick技術的引入,使得你能夠快速構建 UI,具有動畫、各種絢麗效果的 UI都不在話下。在許多情況下基於QML開發的漂亮的介面想將他設計成元件提供給其他人使用,又不想讓別人看到QML原始碼,另外如果其他人是基於vc環境又如何使用你的QML介面呢?
微信開發-生成帶引數的二維碼及簡單使用
// 配置微信 function getWechatAccessToken(){ $appid = appid; $appsecret = appsecret; $url = 'https://api.
IOS中生成二維碼、掃描二維碼
轉載自: http://www.jianshu.com/p/b8bf300e9a56 從IOS7開始集成了二維碼的生成和讀取功能生成二維碼 1 匯入CoreImage框架#import <CoreImage/CoreImage.h> 2 通過濾鏡CIFi
PHP識別二維碼(php-zbarcode)
說明:擴充套件需要依賴ImageMagick和zbar,安裝前先安裝這兩個軟體 yum install ImageMagick.x86_64 ImageMagick-devel.x86_64 tar jxvf zbar-0.10.tar.bz2 cd zb