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这个文件夹
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();
Tags: Thinkphp扩展库解析二维码 Zxing
- 上一篇:ThinkPHP的标签制作实例讲解
- 下一篇:最后一页
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)