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();
上一篇:PHP使用mysql_fetch_row查询获得数据行列表的方法
栏 目:PHP代码
本文标题:Thinkphp使用Zxing扩展库解析二维码内容图文讲解
本文地址:http://www.codeinn.net/misctech/195637.html