Thinkphp使用Zxing扩展库解析二维码内容图文讲解

 更新时间:2021年03月05日 10:50:23   作者:祝君圆梦  
这篇文章主要介绍了Thinkphp使用Zxing扩展库解析二维码内容图文讲解,图文步骤讲解的很清晰,有需要的同学可以跟着小编一起来学习下

一、下载PHP版本的Zxing扩展库

下载地址:https://github.com/khanamiryan/php-qrcode-detector-decoder

二、使用Zxing扩展库

1、文件下载好后,直接解压,结构如下,我们只需要lib这个文件夹

2、将lib文件夹重命名为Zxing,然后打开Zxing目录下的QrReader.php文件,可以发现命名空间是Zxing

3、接下来就很简单了,把Zxing文件夹放到thnikphp的扩展目录extend里

4、报错 Fatal error:: Allowed memory size of 134217728 bytes exhausted (tried to allocate 40 bytes) in

报错原因:PHP内存不够

解决方法:在调用QrReader前,先用ini_set()方法修改内存限制大小

//修改php内存限制为1024M
ini_set('memory_limit','1024M');

5、报错 Call to undefined function Zxing\Common\fill_array()

解决方法:修改Zxing目录的QrReader.php文件,载入common/customFunctions.php文件,如下:

<?php
namespace Zxing;
 
use Zxing\Common\HybridBinarizer;
use Zxing\Qrcode\QRCodeReader;
include_once('common/customFunctions.php');
 
final class QrReader
{
}

QrReader.php完整代码:

<?php
namespace Zxing;
 
use Zxing\Common\HybridBinarizer;
use Zxing\Qrcode\QRCodeReader;
include_once('common/customFunctions.php');
 
final class QrReader
{
 const SOURCE_TYPE_FILE  = 'file';
 const SOURCE_TYPE_BLOB  = 'blob';
 const SOURCE_TYPE_RESOURCE = 'resource';
 
 private $bitmap;
 private $reader;
 private $result;
 
 public function __construct($imgSource, $sourceType = QrReader::SOURCE_TYPE_FILE, $useImagickIfAvailable = true)
 {
  if (!in_array($sourceType, [
   self::SOURCE_TYPE_FILE,
   self::SOURCE_TYPE_BLOB,
   self::SOURCE_TYPE_RESOURCE,
  ], true)) {
   throw new \InvalidArgumentException('Invalid image source.');
  }
  $im = null;
  switch ($sourceType) {
   case QrReader::SOURCE_TYPE_FILE:
    if ($useImagickIfAvailable && extension_loaded('imagick')) {
     $im = new \Imagick();
     $im->readImage($imgSource);
    } else {
     $image = file_get_contents($imgSource);
     $im = imagecreatefromstring($image);
    }
    break;
 
   case QrReader::SOURCE_TYPE_BLOB:
    if ($useImagickIfAvailable && extension_loaded('imagick')) {
     $im = new \Imagick();
     $im->readImageBlob($imgSource);
    } else {
     $im = imagecreatefromstring($imgSource);
    }
    break;
 
   case QrReader::SOURCE_TYPE_RESOURCE:
    $im = $imgSource;
    if ($useImagickIfAvailable && extension_loaded('imagick')) {
     $useImagickIfAvailable = true;
    } else {
     $useImagickIfAvailable = false;
    }
    break;
  }
  if ($useImagickIfAvailable && extension_loaded('imagick')) {
   if (!$im instanceof \Imagick) {
    throw new \InvalidArgumentException('Invalid image source.');
   }
   $width = $im->getImageWidth();
   $height = $im->getImageHeight();
   $source = new IMagickLuminanceSource($im, $width, $height);
  } else {
   if (!is_resource($im)) {
    throw new \InvalidArgumentException('Invalid image source.');
   }
   $width = imagesx($im);
   $height = imagesy($im);
   $source = new GDLuminanceSource($im, $width, $height);
  }
  $histo  = new HybridBinarizer($source);
  $this->bitmap = new BinaryBitmap($histo);
  $this->reader = new QRCodeReader();
 }
 
 public function decode()
 {
  try {
   $this->result = $this->reader->decode($this->bitmap);
  } catch (NotFoundException $er) {
   $this->result = false;
  } catch (FormatException $er) {
   $this->result = false;
  } catch (ChecksumException $er) {
   $this->result = false;
  }
 }
 
 public function text()
 {
  $this->decode();
 
  if (method_exists($this->result, 'toString')) {
   return $this->result->toString();
  }
 
  return $this->result;
 }
 
 public function getResult()
 {
  return $this->result;
 }
}

6、在代码里调用

//引用
use Zxing\QrReader;
//调用类库
$qrcode = new QrReader("二维码图片路径"); 
$content = $qrcode->text();

到此这篇关于Thinkphp使用Zxing扩展库解析二维码内容图文讲解的文章就介绍到这了,更多相关Thinkphp使用Zxing扩展库解析二维码内容内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • laravel 修改.htaccess文件 重定向public的解决方法

    laravel 修改.htaccess文件 重定向public的解决方法

    今天小编就为大家分享一篇laravel 修改.htaccess文件 重定向public的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • Thinkphp开发--集成极光推送

    Thinkphp开发--集成极光推送

    极光推送(JPush)是独立的第三方云推送平台,致力于为全球移动应用开发者提供专业、高效的移动消息推送服务。本文讲述如何在将极光推送合到ThinkPHP框架中,
    2017-09-09
  • ThinkPHP模板引擎之导入资源文件方法详解

    ThinkPHP模板引擎之导入资源文件方法详解

    这篇文章主要介绍了ThinkPHP模板引擎的导入资源文件方法,需要的朋友可以参考下
    2014-06-06
  • Laravel重写用户登录简单示例

    Laravel重写用户登录简单示例

    这篇文章主要介绍了Laravel重写用户登录的方法,结合简单实例形式分析了Laravel框架根据已有的login方法重写实现针对验证码、后台登陆频率及日志记录的扩种等功能,需要的朋友可以参考下
    2016-10-10
  • php数组去除空值函数分享

    php数组去除空值函数分享

    本文给大家分享一个使用php制作数组去除空值函数,非常实用,推荐给大家,希望大家能够喜欢。
    2015-02-02
  • thinkPHP中volist标签用法示例

    thinkPHP中volist标签用法示例

    这篇文章主要介绍了thinkPHP中volist标签用法,结合实例形式分析了thinkPHP中volist标签的功能、属性及相关使用技巧,需要的朋友可以参考下
    2016-12-12
  • thinkPHP模板中for循环与switch语句用法示例

    thinkPHP模板中for循环与switch语句用法示例

    这篇文章主要介绍了thinkPHP模板中for循环与switch语句用法,结合实例形式分析了for循环与switch语句的具体功能、定义与具体使用技巧,需要的朋友可以参考下
    2016-11-11
  • 完美解决Thinkphp3.2中插入相同数据的问题

    完美解决Thinkphp3.2中插入相同数据的问题

    下面小编就为大家带来一篇完美解决Thinkphp3.2中插入相同数据的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • thinkPHP5框架数据库连贯操作之cache()用法分析

    thinkPHP5框架数据库连贯操作之cache()用法分析

    这篇文章主要介绍了thinkPHP5框架数据库连贯操作之cache()用法,结合实例形式分析了thinkPHP5中缓存cache的应用场景及连贯操作中cache的设置、更新、删除等操作技巧,需要的朋友可以参考下
    2018-01-01
  • CI框架(CodeIgniter)操作redis的方法详解

    CI框架(CodeIgniter)操作redis的方法详解

    这篇文章主要介绍了CI框架(CodeIgniter)操作redis的方法,结合实例形式详细分析了CodeIgniter框架针对redis数据库操作的相关配置与使用技巧,需要的朋友可以参考下
    2018-01-01

最新评论