当前位置:首页 > CMS教程 > Thinkphp > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2022-04-17 09:17:17 浏览: 评论:0 

这篇文章主要介绍了Thinkphp使用Zxing扩展库解析二维码内容图文讲解,图文步骤讲解的很清晰,有需要的同学可以跟着小编一起来学习下。

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

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

二、使用Zxing扩展库

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

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

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

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

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

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

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文件,如下:

  1. <?php 
  2. namespace Zxing; 
  3.    
  4. use Zxing\Common\HybridBinarizer; 
  5. use Zxing\Qrcode\QRCodeReader; 
  6. include_once('common/customFunctions.php'); 
  7.    
  8. final class QrReader 

QrReader.php完整代码:

  1. <?php 
  2. namespace Zxing; 
  3.    
  4. use Zxing\Common\HybridBinarizer; 
  5. use Zxing\Qrcode\QRCodeReader; 
  6. include_once('common/customFunctions.php'); 
  7.    
  8. final class QrReader 
  9.  const SOURCE_TYPE_FILE  = 'file'
  10.  const SOURCE_TYPE_BLOB  = 'blob'
  11.  const SOURCE_TYPE_RESOURCE = 'resource'
  12.    
  13.  private $bitmap
  14.  private $reader
  15.  private $result
  16.    
  17.  public function __construct($imgSource$sourceType = QrReader::SOURCE_TYPE_FILE, $useImagickIfAvailable = true) 
  18.  { 
  19.   if (!in_array($sourceType, [ 
  20.    self::SOURCE_TYPE_FILE, 
  21.    self::SOURCE_TYPE_BLOB, 
  22.    self::SOURCE_TYPE_RESOURCE, 
  23.   ], true)) { 
  24.    throw new \InvalidArgumentException('Invalid image source.'); 
  25.   } 
  26.   $im = null; 
  27.   switch ($sourceType) { 
  28.    case QrReader::SOURCE_TYPE_FILE: 
  29.     if ($useImagickIfAvailable && extension_loaded('imagick')) { 
  30.      $im = new \Imagick(); 
  31.      $im->readImage($imgSource); 
  32.     } else { 
  33.      $image = file_get_contents($imgSource); 
  34.      $im = imagecreatefromstring($image); 
  35.     } 
  36.     break
  37.    
  38.    case QrReader::SOURCE_TYPE_BLOB: 
  39.     if ($useImagickIfAvailable && extension_loaded('imagick')) { 
  40.      $im = new \Imagick(); 
  41.      $im->readImageBlob($imgSource); 
  42.     } else { 
  43.      $im = imagecreatefromstring($imgSource); 
  44.     } 
  45.     break
  46.    
  47.    case QrReader::SOURCE_TYPE_RESOURCE: 
  48.     $im = $imgSource
  49.     if ($useImagickIfAvailable && extension_loaded('imagick')) { 
  50.      $useImagickIfAvailable = true; 
  51.     } else { 
  52.      $useImagickIfAvailable = false; 
  53.     } 
  54.     break
  55.   } 
  56.   if ($useImagickIfAvailable && extension_loaded('imagick')) { 
  57.    if (!$im instanceof \Imagick) { 
  58.     throw new \InvalidArgumentException('Invalid image source.'); 
  59.    } 
  60.    $width = $im->getImageWidth(); 
  61.    $height = $im->getImageHeight(); 
  62.    $source = new IMagickLuminanceSource($im$width$height); 
  63.   } else { 
  64.    if (!is_resource($im)) { 
  65.     throw new \InvalidArgumentException('Invalid image source.'); 
  66.    } 
  67.    $width = imagesx($im); 
  68.    $height = imagesy($im); 
  69.    $source = new GDLuminanceSource($im$width$height); 
  70.   } 
  71.   $histo  = new HybridBinarizer($source); 
  72.   $this->bitmap = new BinaryBitmap($histo); 
  73.   $this->reader = new QRCodeReader(); 
  74.  } 
  75.    
  76.  public function decode() 
  77.  { 
  78.   try { 
  79.    $this->result = $this->reader->decode($this->bitmap); 
  80.   } catch (NotFoundException $er) { 
  81.    $this->result = false; 
  82.   } catch (FormatException $er) { 
  83.    $this->result = false; 
  84.   } catch (ChecksumException $er) { 
  85.    $this->result = false; 
  86.   } 
  87.  } 
  88.    
  89.  public function text() 
  90.  { 
  91.   $this->decode(); 
  92.    
  93.   if (method_exists($this->result, 'toString')) { 
  94.    return $this->result->toString(); 
  95.   } 
  96.    
  97.   return $this->result; 
  98.  } 
  99.    
  100.  public function getResult() 
  101.  { 
  102.   return $this->result; 
  103.  } 

6、在代码里调用

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

Tags: Thinkphp扩展库解析二维码 Zxing

分享到: