PHP 资讯生成、识别二维码

透过那 2 天的煎熬,作者卸载了
php7.1。原因唯有一个——小编要安装的条形码扩张模块 php-zbarcode 的 c
语言源代码不协理 php7。改源代码改了半天,如故没奏效。最终看 github
上一个团结的 issue 换回了
php5.6。那下装起来顺遂多了~话不多说,正题初阶。

以下部分多数书收集来源于互连网的精晓,和各位在成品路上颠簸的人共勉。lz只是整治了万众的灵气,多谢网络的无私

 

一 、产品市镇

一、php 生成 qr code 二维码

phpqrcode 是由 php 编写的、可以生成
QPAJERO 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 是前者生成 QPAJERO 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 个二维码了。

留意一下:

  1. 不言而喻,今后记下那篇文档的时候,根据官网和 github
    还有别的部分博客上的认证都只加载了 jquery.qrcode.js (query.js
    除外),不过只加载那1个 jQ 的话作者那里不算,必须再加载 qrcode.js
  2. jQ 生成 QEvoque Code 的代码必需在容器成分前面,可以放在 <body>
    标签内最后。假设放在<head>标签中也生不出去 Q卡宴 Code。那是
    github上的二个例子

 

《长尾理论》——产品商场

叁 、php 生成电子名片

《鬼怪法学》——产品市集

1. vCard

vCard 是电子名片的文件格式标准。它一般附加在电子邮件之后,但也得以用于其余场馆(如在网络上相互沟通)。vCard可含蓄的新闻有:姓名、地址资讯、电话号码、UTiggoL,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:forrestgump@walladalla.com
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:name@example.com
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:name@example.com'.EOL;
// $vcard .= 'REV:20171201T005548Z'.EOL;
// $vcard .= 'END:VCARD';

// QRcode::png($vcard);

浏览器访问这么些 php 脚本会突显一张二维码,微信扫一扫,结果如下:

资讯 1

其一电子名片还足以一向助长到你的手机联系人里。

 

贰 、产品设计

肆 、php 识别二维码(工具)

php 识别二维码或条形码须要 3 个工具。

1. ImageMagick

ImageMagick
是1个用来查看、编辑位图文件以及开展图像格式转换的盛开源代码软件套装。它可以读取、编辑当先100 种图象格式。ImageMagick 以 ImageMagick 许可证(三个近乎 BSD
的证照)公布。

2. zbar

zbar
是2个开源软件套件,用于读取种种来源的条形码,如视频流,图像文件和原来强度传感器。它协理包蕴 EAN-13 / UPC-A,UPC-E,EAN-8,Code 128,Code 39,Interleaved 2 of 5
和 QEnclave Code 等多种流行的条形码。

3. php-zbarcode

php-zbarcode 是 PHP 读取条形码的壮大模块。使用这些模块此前还亟需设置
ImageMagick 和 zbar 那多个命令行套件。

phpzbarcode 重视于 ImageMagick 和 zbar,zbar 正视于
ImageMagick,ImageMagick 依赖 jpeg 库来提供 jpeg 图片匡助,所以先安装
jpeg 帮忙。

 

安装 jpeg 库

下载地址:http://www.imagemagick.org/download/delegates/本身下载的包名为 jpegsrc.v9b.tar.gz 。

wget http://www.imagemagick.org/download/delegates/jpegsrc.v9b.tar.gz
tar xf jpegsrc.v9b.tar.gz
cd jpeg-9b/
make
sudo make install

 

《用户体验的成分》——你们都懂的

五、安装 ImageMagick

下载地址:https://www.imagemagick.org/download/,作者下载的包名为 ImageMagick.tar.gz

wget https://www.imagemagick.org/download/ImageMagick.tar.gz
tar xf ImageMagick.tar.gz
cd ImageMagick-7.0.7-13
./configure
sudo 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

下载地址:https://sourceforge.net/projects/zbar/files/zbar/。小编下载的风靡版
0.10,包名为 zbar-0.10.tar.gz 

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

 

《锦绣蓝图》——Web新闻架构必读

七、安装 php-zbarcode 

下载地址:https://github.com/mkoppanen/php-zbarcode

wget https://github.com/mkoppanen/php-zbarcode/archive/master.zip
unzip master.zip
cd php-zbarcode-master/ 
./configure --with-php-config=/usr/bin/php-config
make
sudo make install

事业有成后会指示安装到的模块目录

mingc@mingc-GE60-2PL:~/Downloads/qrcode/php-zbarcode-master$ sudo make install 
Installing shared extensions:     /usr/lib/php/20131226/

确认模块的职位

mingc@mingc-GE60-2PL:~/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 增加,编辑 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.ini

接下来就能应用 php -m 命令看到 zbarcode
模块了。

 

《Web新闻架构》——Web音信架构必读

捌 、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:name@example.com
REV:20171201T005548Z
END:VCARD

 

《创立突破性产品》——PM启蒙读物

玖 、参考链接

  

《写给我们看的设计师》——UI设计必读

《应需而变,设计的力量》——造就同理心

《不难法则》——设计思想

三 、团队合营

《决策与判断》——换位思考

《唯有偏执狂才能生存》——情商

《阐述之禅》——气场与感染力

《启示录》——团队 

《项目管理之美》:偏重于项目管理

《驾驭须求进程》:偏重于必要挖掘

《流程管理》 :偏重于项目型公司产品经营

《网站设计解构》:偏重于Web产品老总

《眨眼之间间之美》 :同上

《用户体验的因素》:同上

《GUI设计避讳》 :偏重于客户端产品老董

《About Face 3交互设计精髓》:偏重于客户端产品经营

《用户体验心路》:有肯定用户群产品的产品经营可以看

《胜于言传:网站内容制胜宝典》:资讯类网站产品经营最难堪一看

《Web导航设计》:纵然偏重Web,但个体觉得客户端产品COO也足以看。

《社交红利》

《思考 快与慢》

《定位》 —– 产品经营的首先门课

《创新者的窘况》——- 革命偏好小团队

《自私的基因》 ——- 产品CEO,从精通人性初步

《娱乐至死》 ———- 用户最关键的须求是何等

《创新者的解答》——- 怎么着保证更新

《精益创业》 ———- 九死生平的创业大潮中怎么提升存活率

《跨越界限》——– 颠覆性产品营销圣经

《人月神话》

《资本论》

《论持久战》

豆类列表:http://book.douban.com/doulist/546112/  

09《项目管理之美》:偏重于项目管理

10《精晓须求进程》:偏重于必要挖掘

11《流程管理》 :偏重于项目型公司产品老板

12《网站设计解构》:偏重于Web产品经营

移动产品:http://book.douban.com/doulist/1337939/ 

苏杰推荐:http://iamsujie.com/8000/8014/ 

出品好帖:http://www.zhihu.com/question/19730412 

—————————————小编是分割线———————————————

欢迎添加LZ微信多多互换,微信账号:fengyalin_bety

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注