原因:
想要一个后台解析二维码的服务器,就是开箱即用,解码不依赖互联网的那种,没有找到。搜了一圈,只能找到这个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();
效果:
如果使用手机拍摄照片,需要拍摄光照充足,对比明显。照片越大处理时间越长。