windows下php引入PHPZxing代码,php调用zxing的JAVA jar库,识别二维码图片

原因:

想要一个后台解析二维码的服务器,就是开箱即用,解码不依赖互联网的那种,没有找到。搜了一圈,只能找到这个PHPzxing库,可以让PHP使用exec调用zxing的jar库,进行识别二维码图片,看了说明,有一个参数:setJavaPath配置不对,费了不少时间,特此记录一下,防止遗忘。


准备工作

主要是必备的软件:

1.JDK:使用阿里的dragonwell-8.12.13。
2.PHPzxing:到Github上下载src文件夹即可。
3.准备好自己的PHP代码文件。
4.准备好服务器环境,我是使用的小皮面板windows8.1版。


步骤和代码

1.把jdk解压到自己想要的目录,尽量目录中无中文路径。在环境变量系统变量里设置好JAVA_HOME、CLASS_PATH、PATH的环境变量,具体可参考网上教程,不再赘述。
在这里插入图片描述
在这里插入图片描述

2.将下载的PHPzxing的src目录改个名字,放到自己php代码工程的文件夹下,如果使用composer安装的,应该能直接加载,否则可以自己用require自行引入。

require dirname(dirname(__FILE__)).'\vendor\dsiddharth2\php-zxing\src\PHPZxing'.DIRECTORY_SEPARATOR .'PHPZxingBase.php';
require dirname(dirname(__FILE__)).'\vendor\dsiddharth2\php-zxing\src\PHPZxing'.DIRECTORY_SEPARATOR .'PHPZxingInterface.php';
require dirname(dirname(__FILE__)).'\vendor\dsiddharth2\php-zxing\src\PHPZxing'.DIRECTORY_SEPARATOR .'PHPZxingDecoder.php';
require dirname(dirname(__FILE__)).'\vendor\dsiddharth2\php-zxing\src\PHPZxing'.DIRECTORY_SEPARATOR .'ZxingImage.php';
require dirname(dirname(__FILE__)).'\vendor\dsiddharth2\php-zxing\src\PHPZxing'.DIRECTORY_SEPARATOR .'ZxingBarNotFound.php';

use PHPZxing\PHPZxingDecoder;
use PHPZxing\ZxingImage;

3.对setJavaPath进行正确设置(非常重要,要不必出错)。下面是代码。

// Bar Code Options  官网教程内容,先设置对象参数。
$config = array(

    'try_harder'            => true,  // 当不知道二维码的位置是设置为true。
    'multiple_bar_codes'    => true  // 当一张图片有多张二维码识别,设置为true。
);
$decoder        = new PHPZxingDecoder($config);

/*----------以下是重点-----------*/
//重点:Windows下,setJavaPath必须要设置到java.exe的具体位置才行,无论JAVA环境变量是否设置。
$decoder->setJavaPath("D:\dragonwell-8.12.13\jre\bin\java.exe");
/*------------------------------*/

//如果有多个二维码,返回是数组,如果是一个二维码,直接返回ZxingImage对象,不是数组。
$decodedArray   = $decoder->decode('../upload/qr5pai_xiao.jpg');

if(is_array($decodedArray)){
    foreach ($decodedArray as $data) {
        if($data instanceof PHPZxing\ZxingImage) {
            var_dump(mb_convert_encoding($data->getImageValue(),'utf-8','GBK') );
            var_dump($data->getFormat());
            var_dump($data->getType());
            echo('<br>');
        }
    }
    
}else{
    var_dump($decodedArray);
}
$et=microtime(true);
echo('执行耗时:'.(string)($et-$st).'秒。');
die();

效果:

如果使用手机拍摄照片,需要拍摄光照充足,对比明显。照片越大处理时间越长。

在这里插入图片描述
在这里插入图片描述


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值