php 识别二维码(转载)

近段需要写一个通过PHP来识别二维码的功能,在网上查了很久才解决问题。以此来记录下来解决问题的方法。

最开始找的方法是一个叫 php-zbarcode 的扩展,自己照着网上的安装步骤安装了 ImageMagickzbar ,但编译 php-zbarcode 时出错了,后来换成Center OS 系统还是出错,由于技术有限也就放弃了。

然后是在github上找到了一个叫 php-qrcode-detector-decoder 的扩展,安装方法和使用方法如下,但安装完成后,只能识别只有二维码的图片;但是不能识别一张图片中的二维码(就是图中只有一小部分是二维码)。不符合我得需求又继续查找了一番。

//在控台执行安装
composer require khanamiryan/qrcode-detector-decoder

//使用方法
require __DIR__ . "/vendor/autoload.php";  
$qrcode = new QrReader('path/to_image');
$text = $qrcode->text();         //返回二维码的内容

最后,我发现 php-qrcode-detector-decoder 是基于 Zxing library (谷歌推出的用来识别多种格式条形码的开源项目)而实现的,我也顺利的找到了 Zxing library 的GitHub地址,其中包括了很多语言的二维码识别,有兴趣的可以自己去看。下面来说我们用到的 php-zxing 扩展。

// 在composer文件中引入扩展,然后composer update
{  
    "require": {
        "dsiddharth2/php-zxing": "dev-master"
    }  
}

// php中的代码
use PHPZxing\PHPZxingDecoder;

$config = array(
    'try_harder' => true, // 当不知道二维码的位置是设置为true
    'multiple_bar_codes' => true, // 当要识别多张二维码是设置为true
    'crop' => '100,200,300,300', // 设置二维码的大概位置
);
$decoder        = new PHPZxingDecoder($config);
$decoder->setJavaPath('/your/path/to/java');  //设置jdk的安装路径,该扩展是居于java的,所以需要jdk。如果设置了jdk的环境变量则无需设置

$decodedData    = current($decoder->decode('../images/Code128Barcode.jpg')); // 路径需要时绝对路径或相对路径,不能是url
/**
  *返回的对象类型
  * 识别成功时返回ZxingImage对象 包括
  *        getImageValue        二维码的内容
  *       getFormat            编码图像的格式
  *        getType              获取解码图像的类型,例如:URL,TEXT等
  *        getImagePath         获取图像的路径
  * 图片中没有识别的二维码时返回ZxingBarNotFound对象 包括
  *        getImageErrorCode    获取未找到图像的错误代码
  *        getErrorMessage      错误信息
  *        getImagePath         获取图像的路径
/**
//例如
$decodedData->getImageValue();  // 二维码的内容

本文转自:https://www.jianshu.com/p/91eb7452548a 如需转载,请注明出处:http://www.cnblogs.com/zhuchenglin/p/8352755.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java思维导图

【读书笔记】弄懂服务路由与负载均衡,微服务搞起

1 基本概念 SOA 公共的业务被拆分出来,形成可共用的服务,最大程度地保障代码和逻辑的复用,避免重复建设,这种设计称为SOA。 路由 SOA架构中,服务消费者...

38570
来自专栏琦小虾的Binary

交叉编译学习笔记(一)——交叉编译和交叉工具链

交叉编译学习笔记(一)——交叉编译和交叉工具链 最近看论文看的烦,又重新拾起之前没有完全完成的交叉编译,准备在网上找资料,好好研究一下。 参考链接: htt...

51670
来自专栏编程

Python加圣诞帽

01 ? 前段时间好多人@官方微信许愿说要给自己的头像加圣诞帽,总觉得不太可靠,不晓得最后是PS的还是在微信小程序里搜索圣诞头像给自己戴的,嘿嘿~ 之前在Git...

275100
来自专栏玄魂工作室

利用Png做持久型XSS攻击

关于文件上传漏洞,其实是老生常谈了,其实很多网站都做了很严格的控制。这里我们不去谈如何突破文件上传,而是假设我们能上传一张图片,然后当成html嵌入或者执行。 ...

17020
来自专栏云加头条

腾讯云 CMQ 消息队列测试

最近收到腾讯云提供 CMQ 的内测体验资格,于是对其中的消息队列服务进行消息分发和管理作出测试,并将测试结果以及所遇到的问题进行了汇总。

3.1K00
来自专栏电光石火

jenkins配置多job执行

64940
来自专栏匠心独运的博客

分布式定时任务Elastic-Job框架在SpringBoot工程中的应用实践(二)

文章摘要:在生产环境中部署Elastic-Job集群后,那么如何来运维监控线上跑着的定时任务呢? 如果在生产环境的大规模服务器集群上部署了集成Elastic-...

23720
来自专栏杨建荣的学习笔记

数据迁移工具简单分析 (r2笔记59天)

exp/imp 对于数据结构的复制和同步,还是比较理想的工具。 在数据量比较小的情况下,这个工具的性能要远远好于datapump,而且重点推荐,他对于各种常用...

30150
来自专栏大魏分享(微信公众号:david-share)

咦,如何通过容器同时实现:灰度发布+滚动发布?

(1) 蓝绿部署:不停止老版本,额外搞一套新版本,等测试发现新版本OK后,删除老版本。

1.1K40
来自专栏Spark学习技巧

kafka的编程模型

24340

扫码关注云+社区

领取腾讯云代金券