PHP二維碼

二維碼是一個近幾年來移動設(shè)備上超流行的一種編碼方式皇帮,最早出現(xiàn)在20世紀(jì)20年代卷哩,到1988年才引入中國。現(xiàn)在属拾,日常生活中更是隨處可見将谊。它比傳統(tǒng)的Bar Code條形碼能存更多的信息,也能表示更多的數(shù)據(jù)類型渐白。它具有條碼技術(shù)的一些共性:每種碼制有其特定的字符集尊浓;每個字符占有一定的寬度;具有一定的校驗(yàn)功能等礼预。同時還具有對不同行的信息自動識別功能眠砾、及處理圖形旋轉(zhuǎn)變化點(diǎn)虏劲。

二維碼的優(yōu)點(diǎn)

  1. 高密度編碼托酸,信息容量大。(可容納多達(dá)1850個大寫字母或2710個數(shù)字或1108個字節(jié)柒巫,或500多個漢字励堡,比普通條碼信息容量約高幾十倍。)
  2. 編碼范圍廣堡掏。(可以把圖片应结、聲音、文字、簽字鹅龄、指紋等可以數(shù)字化的信息進(jìn)行編碼揩慕,用條碼表示出來;可以表示多種語言文字扮休;可表示圖像數(shù)據(jù)迎卤。)
  3. 容錯能力強(qiáng),具有糾錯功能玷坠。(因?yàn)槲蹞p等引起局部損壞時蜗搔,照樣可以正確得到識讀)
  4. 譯碼可靠性高。
  5. 可引入加密措施八堡。
  6. 成本低樟凄,易制作,持久耐用兄渺。

二維碼的缺點(diǎn)

  1. 二維碼成為 病毒缝龄,釣魚網(wǎng)站 傳播新的渠道
  2. 容易使自己信息泄露

環(huán)境檢查

$ uname -a
Linux TH-DEV 3.10.0-957.5.1.el7.x86_64 #1 SMP Fri Feb 1 14:54:57 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

$ cat /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core) 

$ php -v
PHP 7.2.6 (cli) (built: Feb 13 2019 20:01:18) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

$ php -m | grep gd
gd

ImageMagick

ImageMagick 是一個用于查看、編輯位圖文件以及進(jìn)行圖像格式轉(zhuǎn)換的開放源代碼軟件套裝挂谍。它可以讀取二拐、編輯超過 100 種圖象格式。ImageMagick 以 ImageMagick 許可證(一個類似 BSD 的許可證)發(fā)布凳兵。

ImageMagick依賴圖片庫來提供圖片支持百新,所以需要先安裝圖片庫。

$ yum install -y libjpeg, libjpeg-devel, libpng, libpng-devel, libtiff,  libtiff-devel, libgif, libgif-devel, freetype, zlib

CentOS安裝ImageMagick

$ yum install -y ImageMagick
$ yum install -y ImageMagick-devel

使用源碼包安裝禁止開啟多線程庐扫,增加參數(shù)–disable-openmp關(guān)閉多線程饭望,降低負(fù)載。

查看安裝的版本

$ convert -version
Version: ImageMagick 6.7.8-9 2019-02-01 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC
Features: OpenMP    
  • Features的值為空或DPC形庭,說明是單線程铅辞。
  • Features的值是OpenMP,說明是多線程萨醒。

刪除原始版本

$ yum remove ImageMagick
$ wget https://www.imagemagick.org/download/ImageMagick.tar.gz
$ tar zxvf ImageMagick
$ cd cd ImageMagick-7.0.8-59/
$ ./configure --enable-shared --enable-threads=posix --with-system-zlib --enable-__cxa_atexit --disable-openmp
$ make && make install
$ ldconfig /usr/local/lib

命令不存在

$ convert -version
convert command notfound

配置環(huán)境變量

$ vim /etc/profile
export ImageMagick_HOME=/usr/local/ImageMagick
export PATH=$PATH:$ImageMagick_HOME/bin

查看最新版本

$ convert -version
Version: ImageMagick 7.0.8-59 Q16 x86_64 2019-08-06 https://imagemagick.org
Copyright: ? 1999-2019 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI 
Delegates (built-in): bzlib fontconfig freetype jng jpeg lzma png tiff x xml zlib

Imagick

ImageMagick的PHP擴(kuò)展是Imagick

CentOS安裝PHP得PECL

$ yum install -y php-pear

使用PHP的PECL安裝Imagick

$ pecl install imagick
$ pecl unstall imagick

查看PHP是否安裝Imagick擴(kuò)展

$ php -m | grep imagick

ZBar

ZBar 是一個開源軟件套件斟珊,用于讀取各種來源的條形碼,如視頻流富纸,圖像文件和原始強(qiáng)度傳感器囤踩。支持包括 EAN-13 / UPC-A,UPC-E晓褪,EAN-8堵漱,Code 128,Code 39涣仿,Interleaved 2 of 5 和 QR Code 等多種流行的條碼勤庐。

ZBar是一個開源庫示惊,用于掃描、讀取二維碼和條形碼愉镰,支持的二維碼包括EAN/UPC米罚、QR等。

CentOS安裝ZBar

$ yum install python-devel
$ yum install zbar-devel
$ pip install zbar

php-zbarcode

php-zbarcode是PHP讀取條形碼的擴(kuò)展模塊丈探,目前僅支持PHP5.x阔拳。我的PHP是7的版本,安裝不上去类嗤,直接放棄糊肠。

生成二維碼

QrCode

QrCode基于PHP的GD庫

$ composer require endroid/qr-code

例如:

function qrcode()
{
    //獲取二維碼地址
    $file = "/uploads/20190225/d66889aeab7850ac61b18c1bd81ac99e.png";
    $qrcode = new QrReader($file);
    $url = $qrcode->text();
    //重新生成二維碼
    $obj = new Qrcode();
    $obj->setText($url);
    $obj->setSize(300);
    $obj->setLabel("推廣碼");
    header("Content-Type:".$obj->getContentType());
    $str = $obj->writeString();
    die($str);
}

識別二維碼

qrcode-detector-decoder

qrcode-detector-decoder包是基于谷歌開源的 zxing 實(shí)現(xiàn)的,需要 PHP >= 5.6遗锣、GD Library支持货裹。

$ composer require khanamiryan/qrcode-detector-decoder

識別二維碼返回地址

use Zxing\QrReader;

$qrcode = new QrReader('path/to_image');
$text = $qrcode->text(); //return decoded text from QR Code

錯誤:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 134217736 bytes) in /vendor/khanamiryan/qrcode-detector-decoder/lib/IMagickLuminanceSource.php on line 60

## [1] ErrorExceptionin IMagickLuminanceSource.php line 60

Allowed memory size of 134217728 bytes exhausted (tried to allocate 134217736 bytes)

解決:默認(rèn)PHP配置文件php.ini中內(nèi)存限制memory_limit = 128M,給修改成memory_limit=512M解決問題精偿。

ImageMagick 多線程(openMP)運(yùn)行時導(dǎo)致CPU暴增到100%

原因是由于新版本的 ImageMagick 啟用了OpenMP弧圆,默認(rèn)開啟多線程處理,導(dǎo)致cpu占用過高笔咽。查看convert -version輸出內(nèi)容是否已經(jīng)開啟了多線程搔预,F(xiàn)eatures的值為空或DPC,說明是單線程叶组;如果Features的值是openMP拯田,說明是多線程。

$ convert -version
Version: ImageMagick 6.7.8-9 2019-02-01 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC
Features: OpenMP    

方案:重新重新編譯ImageMagick最新版甩十,增加參數(shù): –disable-openmp關(guān)閉多線程船庇。

錯誤:

[ error ] [420]NoDecodeDelegateForThisImageFormat `/tmp/magick-nicdMfPB' @ error/constitute.c/ReadImage/544

解決:重新安裝PHP的Imagick擴(kuò)展

$ service php-fpm restart

qr-code-reader

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市侣监,隨后出現(xiàn)的幾起案子鸭轮,更是在濱河造成了極大的恐慌,老刑警劉巖橄霉,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窃爷,死亡現(xiàn)場離奇詭異,居然都是意外死亡姓蜂,警方通過查閱死者的電腦和手機(jī)按厘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來覆糟,“玉大人刻剥,你說我怎么就攤上這事√沧郑” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長麦箍。 經(jīng)常有香客問我漓藕,道長,這世上最難降的妖魔是什么挟裂? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任享钞,我火速辦了婚禮,結(jié)果婚禮上诀蓉,老公的妹妹穿的比我還像新娘栗竖。我一直安慰自己,他們只是感情好渠啤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布狐肢。 她就那樣靜靜地躺著,像睡著了一般沥曹。 火紅的嫁衣襯著肌膚如雪份名。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天妓美,我揣著相機(jī)與錄音僵腺,去河邊找鬼。 笑死壶栋,一個胖子當(dāng)著我的面吹牛辰如,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播贵试,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼丧没,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了锡移?” 一聲冷哼從身側(cè)響起呕童,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎淆珊,沒想到半個月后夺饲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡施符,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年往声,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片戳吝。...
    茶點(diǎn)故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡浩销,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出听哭,到底是詐尸還是另有隱情慢洋,我是刑警寧澤塘雳,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站普筹,受9級特大地震影響败明,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜太防,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一妻顶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蜒车,春花似錦讳嘱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至寓娩,卻和暖如春叛氨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背棘伴。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工寞埠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人焊夸。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓仁连,卻偏偏與公主長得像,于是被迫代替她去往敵國和親阱穗。 傳聞我的和親對象是個殘疾皇子饭冬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容