반응형
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("QR코드 사진 경로");
$content = $qrcode->text();
반응형
'개발 꿀팁 > PHP' 카테고리의 다른 글
php PHP Excel을 사용하여 Excel 가져오기 방법 소개 (기능 소개) (0) | 2022.11.01 |
---|---|
php 빠른 정렬 알고리즘 구현 (0) | 2022.11.01 |
PHP는 base64에 따라 이미지 생성 및 저장 (0) | 2022.11.01 |
nginx+php 설정 (0) | 2022.11.01 |
PHP가 데이터베이스에 이미지를 업로드하고 표시 (0) | 2022.10.31 |