Thinkphp使用Zxing扩展库解析二维码内容图文讲解
<?php
namespace Zxing;
use ZxingCommonHybridBinarizer;
use ZxingQrcodeQRCodeReader;
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;
}
}
- .NET Core系列之MemoryCache 初识
- 007手机一键Root(安机网一键Root) v3.0 官方最新版 一键ROOT您的Android手机
- 12306密码被盗了怎么办?12306密码外泄解决方法
- 12个字的qq网名
- 150M迷你型无线路由器怎么设置?
- 192.168.1.1打不开怎么办?路由器192.168.1.1打不开的原因以及解决办法
- 2011年电子报合订本 电子报 编辑部 中文 PDF版 [84M]
- 2015年1月15日小米新旗舰发布会现场图文直播
- 2016.3.1vivo Xplay5新品发布会现场视频直播 优酷直播
- 2016华为P9发布会视频直播地址 4月15日华为P9国行发布会直播
相关文章
- ThinkPad E430笔记本怎么拆机清灰?
- ThinkPad T400 笔记本详细拆机过程 清理风扇(图文教程)
- CentOS7各个版本镜像下载地址及版本说明(包括Everything版)
- ThinkPad T400/T500/W500显卡切换安装指南
- ThinkPad T500怎么改装触控屏?
- ThinkPad E40 笔记本详细拆机方法(图文教程)
- thinkphp 字母函数详解T/I/N/D/M/A/R/U
- ThinkPad笔记本拆机更换风扇图文教程
- Thinkphp使用Zxing扩展库解析二维码内容图文讲解
- Sothink SWF Catcher(SWF提取软件) v2.6 免费安装版