Initial commit: queue workspace
Made-with: Cursor
This commit is contained in:
205
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/AbstractGdWriter.php
vendored
Normal file
205
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/AbstractGdWriter.php
vendored
Normal file
@@ -0,0 +1,205 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer;
|
||||
|
||||
use Endroid\QrCode\Bacon\MatrixFactory;
|
||||
use Endroid\QrCode\Exception\ValidationException;
|
||||
use Endroid\QrCode\ImageData\LabelImageData;
|
||||
use Endroid\QrCode\ImageData\LogoImageData;
|
||||
use Endroid\QrCode\Label\Alignment\LabelAlignmentLeft;
|
||||
use Endroid\QrCode\Label\Alignment\LabelAlignmentRight;
|
||||
use Endroid\QrCode\Label\LabelInterface;
|
||||
use Endroid\QrCode\Logo\LogoInterface;
|
||||
use Endroid\QrCode\QrCodeInterface;
|
||||
use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeNone;
|
||||
use Endroid\QrCode\Writer\Result\GdResult;
|
||||
use Endroid\QrCode\Writer\Result\ResultInterface;
|
||||
use Zxing\QrReader;
|
||||
|
||||
abstract class AbstractGdWriter implements WriterInterface, ValidatingWriterInterface
|
||||
{
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface|null $logo = null, LabelInterface|null $label = null, array $options = []): ResultInterface
|
||||
{
|
||||
if (!extension_loaded('gd')) {
|
||||
throw new \Exception('Unable to generate image: please check if the GD extension is enabled and configured correctly');
|
||||
}
|
||||
|
||||
$matrixFactory = new MatrixFactory();
|
||||
$matrix = $matrixFactory->create($qrCode);
|
||||
|
||||
$baseBlockSize = $qrCode->getRoundBlockSizeMode() instanceof RoundBlockSizeModeNone ? 10 : intval($matrix->getBlockSize());
|
||||
$baseImage = imagecreatetruecolor($matrix->getBlockCount() * $baseBlockSize, $matrix->getBlockCount() * $baseBlockSize);
|
||||
|
||||
if (!$baseImage) {
|
||||
throw new \Exception('Unable to generate image: please check if the GD extension is enabled and configured correctly');
|
||||
}
|
||||
|
||||
/** @var int $foregroundColor */
|
||||
$foregroundColor = imagecolorallocatealpha(
|
||||
$baseImage,
|
||||
$qrCode->getForegroundColor()->getRed(),
|
||||
$qrCode->getForegroundColor()->getGreen(),
|
||||
$qrCode->getForegroundColor()->getBlue(),
|
||||
$qrCode->getForegroundColor()->getAlpha()
|
||||
);
|
||||
|
||||
/** @var int $transparentColor */
|
||||
$transparentColor = imagecolorallocatealpha($baseImage, 255, 255, 255, 127);
|
||||
|
||||
imagefill($baseImage, 0, 0, $transparentColor);
|
||||
|
||||
for ($rowIndex = 0; $rowIndex < $matrix->getBlockCount(); ++$rowIndex) {
|
||||
for ($columnIndex = 0; $columnIndex < $matrix->getBlockCount(); ++$columnIndex) {
|
||||
if (1 === $matrix->getBlockValue($rowIndex, $columnIndex)) {
|
||||
imagefilledrectangle(
|
||||
$baseImage,
|
||||
$columnIndex * $baseBlockSize,
|
||||
$rowIndex * $baseBlockSize,
|
||||
($columnIndex + 1) * $baseBlockSize - 1,
|
||||
($rowIndex + 1) * $baseBlockSize - 1,
|
||||
$foregroundColor
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$targetWidth = $matrix->getOuterSize();
|
||||
$targetHeight = $matrix->getOuterSize();
|
||||
|
||||
if ($label instanceof LabelInterface) {
|
||||
$labelImageData = LabelImageData::createForLabel($label);
|
||||
$targetHeight += $labelImageData->getHeight() + $label->getMargin()->getTop() + $label->getMargin()->getBottom();
|
||||
}
|
||||
|
||||
$targetImage = imagecreatetruecolor($targetWidth, $targetHeight);
|
||||
|
||||
if (!$targetImage) {
|
||||
throw new \Exception('Unable to generate image: please check if the GD extension is enabled and configured correctly');
|
||||
}
|
||||
|
||||
/** @var int $backgroundColor */
|
||||
$backgroundColor = imagecolorallocatealpha(
|
||||
$targetImage,
|
||||
$qrCode->getBackgroundColor()->getRed(),
|
||||
$qrCode->getBackgroundColor()->getGreen(),
|
||||
$qrCode->getBackgroundColor()->getBlue(),
|
||||
$qrCode->getBackgroundColor()->getAlpha()
|
||||
);
|
||||
|
||||
imagefill($targetImage, 0, 0, $backgroundColor);
|
||||
|
||||
imagecopyresampled(
|
||||
$targetImage,
|
||||
$baseImage,
|
||||
$matrix->getMarginLeft(),
|
||||
$matrix->getMarginLeft(),
|
||||
0,
|
||||
0,
|
||||
$matrix->getInnerSize(),
|
||||
$matrix->getInnerSize(),
|
||||
imagesx($baseImage),
|
||||
imagesy($baseImage)
|
||||
);
|
||||
|
||||
if ($qrCode->getBackgroundColor()->getAlpha() > 0) {
|
||||
imagesavealpha($targetImage, true);
|
||||
}
|
||||
|
||||
$result = new GdResult($matrix, $targetImage);
|
||||
|
||||
if ($logo instanceof LogoInterface) {
|
||||
$result = $this->addLogo($logo, $result);
|
||||
}
|
||||
|
||||
if ($label instanceof LabelInterface) {
|
||||
$result = $this->addLabel($label, $result);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
private function addLogo(LogoInterface $logo, GdResult $result): GdResult
|
||||
{
|
||||
$logoImageData = LogoImageData::createForLogo($logo);
|
||||
|
||||
if ('image/svg+xml' === $logoImageData->getMimeType()) {
|
||||
throw new \Exception('PNG Writer does not support SVG logo');
|
||||
}
|
||||
|
||||
$targetImage = $result->getImage();
|
||||
$matrix = $result->getMatrix();
|
||||
|
||||
if ($logoImageData->getPunchoutBackground()) {
|
||||
/** @var int $transparent */
|
||||
$transparent = imagecolorallocatealpha($targetImage, 255, 255, 255, 127);
|
||||
imagealphablending($targetImage, false);
|
||||
$xOffsetStart = intval($matrix->getOuterSize() / 2 - $logoImageData->getWidth() / 2);
|
||||
$yOffsetStart = intval($matrix->getOuterSize() / 2 - $logoImageData->getHeight() / 2);
|
||||
for ($xOffset = $xOffsetStart; $xOffset < $xOffsetStart + $logoImageData->getWidth(); ++$xOffset) {
|
||||
for ($yOffset = $yOffsetStart; $yOffset < $yOffsetStart + $logoImageData->getHeight(); ++$yOffset) {
|
||||
imagesetpixel($targetImage, $xOffset, $yOffset, $transparent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
imagecopyresampled(
|
||||
$targetImage,
|
||||
$logoImageData->getImage(),
|
||||
intval($matrix->getOuterSize() / 2 - $logoImageData->getWidth() / 2),
|
||||
intval($matrix->getOuterSize() / 2 - $logoImageData->getHeight() / 2),
|
||||
0,
|
||||
0,
|
||||
$logoImageData->getWidth(),
|
||||
$logoImageData->getHeight(),
|
||||
imagesx($logoImageData->getImage()),
|
||||
imagesy($logoImageData->getImage())
|
||||
);
|
||||
|
||||
return new GdResult($matrix, $targetImage);
|
||||
}
|
||||
|
||||
private function addLabel(LabelInterface $label, GdResult $result): GdResult
|
||||
{
|
||||
$targetImage = $result->getImage();
|
||||
|
||||
$labelImageData = LabelImageData::createForLabel($label);
|
||||
|
||||
/** @var int $textColor */
|
||||
$textColor = imagecolorallocatealpha(
|
||||
$targetImage,
|
||||
$label->getTextColor()->getRed(),
|
||||
$label->getTextColor()->getGreen(),
|
||||
$label->getTextColor()->getBlue(),
|
||||
$label->getTextColor()->getAlpha()
|
||||
);
|
||||
|
||||
$x = intval(imagesx($targetImage) / 2 - $labelImageData->getWidth() / 2);
|
||||
$y = imagesy($targetImage) - $label->getMargin()->getBottom();
|
||||
|
||||
if ($label->getAlignment() instanceof LabelAlignmentLeft) {
|
||||
$x = $label->getMargin()->getLeft();
|
||||
} elseif ($label->getAlignment() instanceof LabelAlignmentRight) {
|
||||
$x = imagesx($targetImage) - $labelImageData->getWidth() - $label->getMargin()->getRight();
|
||||
}
|
||||
|
||||
imagettftext($targetImage, $label->getFont()->getSize(), 0, $x, $y, $textColor, $label->getFont()->getPath(), $label->getText());
|
||||
|
||||
return new GdResult($result->getMatrix(), $targetImage);
|
||||
}
|
||||
|
||||
public function validateResult(ResultInterface $result, string $expectedData): void
|
||||
{
|
||||
$string = $result->getString();
|
||||
|
||||
if (!class_exists(QrReader::class)) {
|
||||
throw ValidationException::createForMissingPackage('khanamiryan/qrcode-detector-decoder');
|
||||
}
|
||||
|
||||
$reader = new QrReader($string, QrReader::SOURCE_TYPE_BLOB);
|
||||
if ($reader->text() !== $expectedData) {
|
||||
throw ValidationException::createForInvalidData($expectedData, strval($reader->text()));
|
||||
}
|
||||
}
|
||||
}
|
||||
23
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/BinaryWriter.php
vendored
Normal file
23
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/BinaryWriter.php
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer;
|
||||
|
||||
use Endroid\QrCode\Bacon\MatrixFactory;
|
||||
use Endroid\QrCode\Label\LabelInterface;
|
||||
use Endroid\QrCode\Logo\LogoInterface;
|
||||
use Endroid\QrCode\QrCodeInterface;
|
||||
use Endroid\QrCode\Writer\Result\BinaryResult;
|
||||
use Endroid\QrCode\Writer\Result\ResultInterface;
|
||||
|
||||
final class BinaryWriter implements WriterInterface
|
||||
{
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface|null $logo = null, LabelInterface|null $label = null, array $options = []): ResultInterface
|
||||
{
|
||||
$matrixFactory = new MatrixFactory();
|
||||
$matrix = $matrixFactory->create($qrCode);
|
||||
|
||||
return new BinaryResult($matrix);
|
||||
}
|
||||
}
|
||||
23
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/ConsoleWriter.php
vendored
Normal file
23
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/ConsoleWriter.php
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer;
|
||||
|
||||
use Endroid\QrCode\Bacon\MatrixFactory;
|
||||
use Endroid\QrCode\Label\LabelInterface;
|
||||
use Endroid\QrCode\Logo\LogoInterface;
|
||||
use Endroid\QrCode\QrCodeInterface;
|
||||
use Endroid\QrCode\Writer\Result\ConsoleResult;
|
||||
use Endroid\QrCode\Writer\Result\ResultInterface;
|
||||
|
||||
final class ConsoleWriter implements WriterInterface
|
||||
{
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface|null $logo = null, LabelInterface|null $label = null, $options = []): ResultInterface
|
||||
{
|
||||
$matrixFactory = new MatrixFactory();
|
||||
$matrix = $matrixFactory->create($qrCode);
|
||||
|
||||
return new ConsoleResult($matrix, $qrCode->getForegroundColor(), $qrCode->getBackgroundColor());
|
||||
}
|
||||
}
|
||||
32
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/DebugWriter.php
vendored
Normal file
32
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/DebugWriter.php
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer;
|
||||
|
||||
use Endroid\QrCode\Bacon\MatrixFactory;
|
||||
use Endroid\QrCode\Label\LabelInterface;
|
||||
use Endroid\QrCode\Logo\LogoInterface;
|
||||
use Endroid\QrCode\QrCodeInterface;
|
||||
use Endroid\QrCode\Writer\Result\DebugResult;
|
||||
use Endroid\QrCode\Writer\Result\ResultInterface;
|
||||
|
||||
final class DebugWriter implements WriterInterface, ValidatingWriterInterface
|
||||
{
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface|null $logo = null, LabelInterface|null $label = null, array $options = []): ResultInterface
|
||||
{
|
||||
$matrixFactory = new MatrixFactory();
|
||||
$matrix = $matrixFactory->create($qrCode);
|
||||
|
||||
return new DebugResult($matrix, $qrCode, $logo, $label, $options);
|
||||
}
|
||||
|
||||
public function validateResult(ResultInterface $result, string $expectedData): void
|
||||
{
|
||||
if (!$result instanceof DebugResult) {
|
||||
throw new \Exception('Unable to write logo: instance of DebugResult expected');
|
||||
}
|
||||
|
||||
$result->setValidateResult(true);
|
||||
}
|
||||
}
|
||||
44
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/EpsWriter.php
vendored
Normal file
44
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/EpsWriter.php
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer;
|
||||
|
||||
use Endroid\QrCode\Bacon\MatrixFactory;
|
||||
use Endroid\QrCode\Label\LabelInterface;
|
||||
use Endroid\QrCode\Logo\LogoInterface;
|
||||
use Endroid\QrCode\QrCodeInterface;
|
||||
use Endroid\QrCode\Writer\Result\EpsResult;
|
||||
use Endroid\QrCode\Writer\Result\ResultInterface;
|
||||
|
||||
final class EpsWriter implements WriterInterface
|
||||
{
|
||||
public const DECIMAL_PRECISION = 10;
|
||||
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface|null $logo = null, LabelInterface|null $label = null, array $options = []): ResultInterface
|
||||
{
|
||||
$matrixFactory = new MatrixFactory();
|
||||
$matrix = $matrixFactory->create($qrCode);
|
||||
|
||||
$lines = [
|
||||
'%!PS-Adobe-3.0 EPSF-3.0',
|
||||
'%%BoundingBox: 0 0 '.$matrix->getOuterSize().' '.$matrix->getOuterSize(),
|
||||
'/F { rectfill } def',
|
||||
number_format($qrCode->getBackgroundColor()->getRed() / 100, 2, '.', ',').' '.number_format($qrCode->getBackgroundColor()->getGreen() / 100, 2, '.', ',').' '.number_format($qrCode->getBackgroundColor()->getBlue() / 100, 2, '.', ',').' setrgbcolor',
|
||||
'0 0 '.$matrix->getOuterSize().' '.$matrix->getOuterSize().' F',
|
||||
number_format($qrCode->getForegroundColor()->getRed() / 100, 2, '.', ',').' '.number_format($qrCode->getForegroundColor()->getGreen() / 100, 2, '.', ',').' '.number_format($qrCode->getForegroundColor()->getBlue() / 100, 2, '.', ',').' setrgbcolor',
|
||||
];
|
||||
|
||||
for ($rowIndex = 0; $rowIndex < $matrix->getBlockCount(); ++$rowIndex) {
|
||||
for ($columnIndex = 0; $columnIndex < $matrix->getBlockCount(); ++$columnIndex) {
|
||||
if (1 === $matrix->getBlockValue($matrix->getBlockCount() - 1 - $rowIndex, $columnIndex)) {
|
||||
$x = $matrix->getMarginLeft() + $matrix->getBlockSize() * $columnIndex;
|
||||
$y = $matrix->getMarginLeft() + $matrix->getBlockSize() * $rowIndex;
|
||||
$lines[] = number_format($x, self::DECIMAL_PRECISION, '.', '').' '.number_format($y, self::DECIMAL_PRECISION, '.', '').' '.number_format($matrix->getBlockSize(), self::DECIMAL_PRECISION, '.', '').' '.number_format($matrix->getBlockSize(), self::DECIMAL_PRECISION, '.', '').' F';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return new EpsResult($matrix, $lines);
|
||||
}
|
||||
}
|
||||
23
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/GifWriter.php
vendored
Normal file
23
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/GifWriter.php
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer;
|
||||
|
||||
use Endroid\QrCode\Label\LabelInterface;
|
||||
use Endroid\QrCode\Logo\LogoInterface;
|
||||
use Endroid\QrCode\QrCodeInterface;
|
||||
use Endroid\QrCode\Writer\Result\GdResult;
|
||||
use Endroid\QrCode\Writer\Result\GifResult;
|
||||
use Endroid\QrCode\Writer\Result\ResultInterface;
|
||||
|
||||
final class GifWriter extends AbstractGdWriter
|
||||
{
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface|null $logo = null, LabelInterface|null $label = null, array $options = []): ResultInterface
|
||||
{
|
||||
/** @var GdResult $gdResult */
|
||||
$gdResult = parent::write($qrCode, $logo, $label, $options);
|
||||
|
||||
return new GifResult($gdResult->getMatrix(), $gdResult->getImage());
|
||||
}
|
||||
}
|
||||
139
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/PdfWriter.php
vendored
Normal file
139
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/PdfWriter.php
vendored
Normal file
@@ -0,0 +1,139 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer;
|
||||
|
||||
use Endroid\QrCode\Bacon\MatrixFactory;
|
||||
use Endroid\QrCode\Label\LabelInterface;
|
||||
use Endroid\QrCode\Logo\LogoInterface;
|
||||
use Endroid\QrCode\QrCodeInterface;
|
||||
use Endroid\QrCode\Writer\Result\PdfResult;
|
||||
use Endroid\QrCode\Writer\Result\ResultInterface;
|
||||
|
||||
final class PdfWriter implements WriterInterface
|
||||
{
|
||||
public const WRITER_OPTION_UNIT = 'unit';
|
||||
public const WRITER_OPTION_PDF = 'fpdf';
|
||||
public const WRITER_OPTION_X = 'x';
|
||||
public const WRITER_OPTION_Y = 'y';
|
||||
public const WRITER_OPTION_LINK = 'link';
|
||||
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface|null $logo = null, LabelInterface|null $label = null, array $options = []): ResultInterface
|
||||
{
|
||||
$matrixFactory = new MatrixFactory();
|
||||
$matrix = $matrixFactory->create($qrCode);
|
||||
|
||||
$unit = 'mm';
|
||||
if (isset($options[self::WRITER_OPTION_UNIT])) {
|
||||
$unit = $options[self::WRITER_OPTION_UNIT];
|
||||
}
|
||||
|
||||
$allowedUnits = ['mm', 'pt', 'cm', 'in'];
|
||||
if (!in_array($unit, $allowedUnits)) {
|
||||
throw new \Exception(sprintf('PDF Measure unit should be one of [%s]', implode(', ', $allowedUnits)));
|
||||
}
|
||||
|
||||
$labelSpace = 0;
|
||||
if ($label instanceof LabelInterface) {
|
||||
$labelSpace = 30;
|
||||
}
|
||||
|
||||
if (!class_exists(\FPDF::class)) {
|
||||
throw new \Exception('Unable to find FPDF: check your installation');
|
||||
}
|
||||
|
||||
$foregroundColor = $qrCode->getForegroundColor();
|
||||
if ($foregroundColor->getAlpha() > 0) {
|
||||
throw new \Exception('PDF Writer does not support alpha channels');
|
||||
}
|
||||
$backgroundColor = $qrCode->getBackgroundColor();
|
||||
if ($backgroundColor->getAlpha() > 0) {
|
||||
throw new \Exception('PDF Writer does not support alpha channels');
|
||||
}
|
||||
|
||||
if (isset($options[self::WRITER_OPTION_PDF])) {
|
||||
$fpdf = $options[self::WRITER_OPTION_PDF];
|
||||
if (!$fpdf instanceof \FPDF) {
|
||||
throw new \Exception('pdf option must be an instance of FPDF');
|
||||
}
|
||||
} else {
|
||||
// @todo Check how to add label height later
|
||||
$fpdf = new \FPDF('P', $unit, [$matrix->getOuterSize(), $matrix->getOuterSize() + $labelSpace]);
|
||||
$fpdf->AddPage();
|
||||
}
|
||||
|
||||
$x = 0;
|
||||
if (isset($options[self::WRITER_OPTION_X])) {
|
||||
$x = $options[self::WRITER_OPTION_X];
|
||||
}
|
||||
$y = 0;
|
||||
if (isset($options[self::WRITER_OPTION_Y])) {
|
||||
$y = $options[self::WRITER_OPTION_Y];
|
||||
}
|
||||
|
||||
$fpdf->SetFillColor($backgroundColor->getRed(), $backgroundColor->getGreen(), $backgroundColor->getBlue());
|
||||
$fpdf->Rect($x, $y, $matrix->getOuterSize(), $matrix->getOuterSize(), 'F');
|
||||
$fpdf->SetFillColor($foregroundColor->getRed(), $foregroundColor->getGreen(), $foregroundColor->getBlue());
|
||||
|
||||
for ($rowIndex = 0; $rowIndex < $matrix->getBlockCount(); ++$rowIndex) {
|
||||
for ($columnIndex = 0; $columnIndex < $matrix->getBlockCount(); ++$columnIndex) {
|
||||
if (1 === $matrix->getBlockValue($rowIndex, $columnIndex)) {
|
||||
$fpdf->Rect(
|
||||
$x + $matrix->getMarginLeft() + ($columnIndex * $matrix->getBlockSize()),
|
||||
$y + $matrix->getMarginLeft() + ($rowIndex * $matrix->getBlockSize()),
|
||||
$matrix->getBlockSize(),
|
||||
$matrix->getBlockSize(),
|
||||
'F'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($logo instanceof LogoInterface) {
|
||||
$this->addLogo($logo, $fpdf, $x, $y, $matrix->getOuterSize());
|
||||
}
|
||||
|
||||
if ($label instanceof LabelInterface) {
|
||||
$fpdf->SetXY($x, $y + $matrix->getOuterSize() + $labelSpace - 25);
|
||||
$fpdf->SetFont('Helvetica', '', $label->getFont()->getSize());
|
||||
$fpdf->Cell($matrix->getOuterSize(), 0, $label->getText(), 0, 0, 'C');
|
||||
}
|
||||
|
||||
if (isset($options[self::WRITER_OPTION_LINK])) {
|
||||
$link = $options[self::WRITER_OPTION_LINK];
|
||||
$fpdf->Link($x, $y, $x + $matrix->getOuterSize(), $y + $matrix->getOuterSize(), $link);
|
||||
}
|
||||
|
||||
return new PdfResult($matrix, $fpdf);
|
||||
}
|
||||
|
||||
private function addLogo(LogoInterface $logo, \FPDF $fpdf, float $x, float $y, float $size): void
|
||||
{
|
||||
$logoPath = $logo->getPath();
|
||||
$logoHeight = $logo->getResizeToHeight();
|
||||
$logoWidth = $logo->getResizeToWidth();
|
||||
|
||||
if (null === $logoHeight || null === $logoWidth) {
|
||||
$imageSize = \getimagesize($logoPath);
|
||||
if (!$imageSize) {
|
||||
throw new \Exception(sprintf('Unable to read image size for logo "%s"', $logoPath));
|
||||
}
|
||||
[$logoSourceWidth, $logoSourceHeight] = $imageSize;
|
||||
|
||||
if (null === $logoWidth) {
|
||||
$logoWidth = (int) $logoSourceWidth;
|
||||
}
|
||||
|
||||
if (null === $logoHeight) {
|
||||
$aspectRatio = $logoWidth / $logoSourceWidth;
|
||||
$logoHeight = (int) ($logoSourceHeight * $aspectRatio);
|
||||
}
|
||||
}
|
||||
|
||||
$logoX = $x + $size / 2 - $logoWidth / 2;
|
||||
$logoY = $y + $size / 2 - $logoHeight / 2;
|
||||
|
||||
$fpdf->Image($logoPath, $logoX, $logoY, $logoWidth, $logoHeight);
|
||||
}
|
||||
}
|
||||
29
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/PngWriter.php
vendored
Normal file
29
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/PngWriter.php
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer;
|
||||
|
||||
use Endroid\QrCode\Label\LabelInterface;
|
||||
use Endroid\QrCode\Logo\LogoInterface;
|
||||
use Endroid\QrCode\QrCodeInterface;
|
||||
use Endroid\QrCode\Writer\Result\GdResult;
|
||||
use Endroid\QrCode\Writer\Result\PngResult;
|
||||
use Endroid\QrCode\Writer\Result\ResultInterface;
|
||||
|
||||
final class PngWriter extends AbstractGdWriter
|
||||
{
|
||||
public const WRITER_OPTION_COMPRESSION_LEVEL = 'compression_level';
|
||||
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface|null $logo = null, LabelInterface|null $label = null, array $options = []): ResultInterface
|
||||
{
|
||||
if (!isset($options[self::WRITER_OPTION_COMPRESSION_LEVEL])) {
|
||||
$options[self::WRITER_OPTION_COMPRESSION_LEVEL] = -1;
|
||||
}
|
||||
|
||||
/** @var GdResult $gdResult */
|
||||
$gdResult = parent::write($qrCode, $logo, $label, $options);
|
||||
|
||||
return new PngResult($gdResult->getMatrix(), $gdResult->getImage(), $options[self::WRITER_OPTION_COMPRESSION_LEVEL]);
|
||||
}
|
||||
}
|
||||
31
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/Result/AbstractResult.php
vendored
Normal file
31
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/Result/AbstractResult.php
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer\Result;
|
||||
|
||||
use Endroid\QrCode\Matrix\MatrixInterface;
|
||||
|
||||
abstract class AbstractResult implements ResultInterface
|
||||
{
|
||||
public function __construct(
|
||||
private MatrixInterface $matrix
|
||||
) {
|
||||
}
|
||||
|
||||
public function getMatrix(): MatrixInterface
|
||||
{
|
||||
return $this->matrix;
|
||||
}
|
||||
|
||||
public function getDataUri(): string
|
||||
{
|
||||
return 'data:'.$this->getMimeType().';base64,'.base64_encode($this->getString());
|
||||
}
|
||||
|
||||
public function saveToFile(string $path): void
|
||||
{
|
||||
$string = $this->getString();
|
||||
file_put_contents($path, $string);
|
||||
}
|
||||
}
|
||||
35
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/Result/BinaryResult.php
vendored
Normal file
35
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/Result/BinaryResult.php
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer\Result;
|
||||
|
||||
use Endroid\QrCode\Matrix\MatrixInterface;
|
||||
|
||||
final class BinaryResult extends AbstractResult
|
||||
{
|
||||
public function __construct(MatrixInterface $matrix)
|
||||
{
|
||||
parent::__construct($matrix);
|
||||
}
|
||||
|
||||
public function getString(): string
|
||||
{
|
||||
$matrix = $this->getMatrix();
|
||||
|
||||
$binaryString = '';
|
||||
for ($rowIndex = 0; $rowIndex < $matrix->getBlockCount(); ++$rowIndex) {
|
||||
for ($columnIndex = 0; $columnIndex < $matrix->getBlockCount(); ++$columnIndex) {
|
||||
$binaryString .= $matrix->getBlockValue($rowIndex, $columnIndex);
|
||||
}
|
||||
$binaryString .= "\n";
|
||||
}
|
||||
|
||||
return $binaryString;
|
||||
}
|
||||
|
||||
public function getMimeType(): string
|
||||
{
|
||||
return 'text/plain';
|
||||
}
|
||||
}
|
||||
69
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/Result/ConsoleResult.php
vendored
Normal file
69
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/Result/ConsoleResult.php
vendored
Normal file
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer\Result;
|
||||
|
||||
use Endroid\QrCode\Color\ColorInterface;
|
||||
use Endroid\QrCode\Matrix\MatrixInterface;
|
||||
|
||||
class ConsoleResult extends AbstractResult
|
||||
{
|
||||
private const TWO_BLOCKS = [
|
||||
0 => ' ',
|
||||
1 => "\xe2\x96\x80",
|
||||
2 => "\xe2\x96\x84",
|
||||
3 => "\xe2\x96\x88",
|
||||
];
|
||||
|
||||
private string $colorEscapeCode;
|
||||
|
||||
public function __construct(
|
||||
MatrixInterface $matrix,
|
||||
ColorInterface $foreground,
|
||||
ColorInterface $background
|
||||
) {
|
||||
parent::__construct($matrix);
|
||||
|
||||
$this->colorEscapeCode = sprintf(
|
||||
"\e[38;2;%d;%d;%dm\e[48;2;%d;%d;%dm",
|
||||
$foreground->getRed(),
|
||||
$foreground->getGreen(),
|
||||
$foreground->getBlue(),
|
||||
$background->getRed(),
|
||||
$background->getGreen(),
|
||||
$background->getBlue()
|
||||
);
|
||||
}
|
||||
|
||||
public function getMimeType(): string
|
||||
{
|
||||
return 'text/plain';
|
||||
}
|
||||
|
||||
public function getString(): string
|
||||
{
|
||||
$matrix = $this->getMatrix();
|
||||
|
||||
$side = $matrix->getBlockCount();
|
||||
$marginLeft = $this->colorEscapeCode.self::TWO_BLOCKS[0].self::TWO_BLOCKS[0];
|
||||
$marginRight = self::TWO_BLOCKS[0].self::TWO_BLOCKS[0]."\e[0m".PHP_EOL;
|
||||
$marginVertical = $marginLeft.str_repeat(self::TWO_BLOCKS[0], $side).$marginRight;
|
||||
|
||||
$qrCodeString = $marginVertical;
|
||||
for ($rowIndex = 0; $rowIndex < $side; $rowIndex += 2) {
|
||||
$qrCodeString .= $marginLeft;
|
||||
for ($columnIndex = 0; $columnIndex < $side; ++$columnIndex) {
|
||||
$combined = $matrix->getBlockValue($rowIndex, $columnIndex);
|
||||
if ($rowIndex + 1 < $side) {
|
||||
$combined |= $matrix->getBlockValue($rowIndex + 1, $columnIndex) << 1;
|
||||
}
|
||||
$qrCodeString .= self::TWO_BLOCKS[$combined];
|
||||
}
|
||||
$qrCodeString .= $marginRight;
|
||||
}
|
||||
$qrCodeString .= $marginVertical;
|
||||
|
||||
return $qrCodeString;
|
||||
}
|
||||
}
|
||||
73
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/Result/DebugResult.php
vendored
Normal file
73
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/Result/DebugResult.php
vendored
Normal file
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer\Result;
|
||||
|
||||
use Endroid\QrCode\Label\LabelInterface;
|
||||
use Endroid\QrCode\Logo\LogoInterface;
|
||||
use Endroid\QrCode\Matrix\MatrixInterface;
|
||||
use Endroid\QrCode\QrCodeInterface;
|
||||
|
||||
final class DebugResult extends AbstractResult
|
||||
{
|
||||
private bool $validateResult = false;
|
||||
|
||||
public function __construct(
|
||||
MatrixInterface $matrix,
|
||||
private QrCodeInterface $qrCode,
|
||||
private LogoInterface|null $logo = null,
|
||||
private LabelInterface|null $label = null,
|
||||
/** @var array<string, mixed> $options */
|
||||
private array $options = []
|
||||
) {
|
||||
parent::__construct($matrix);
|
||||
}
|
||||
|
||||
public function setValidateResult(bool $validateResult): void
|
||||
{
|
||||
$this->validateResult = $validateResult;
|
||||
}
|
||||
|
||||
public function getString(): string
|
||||
{
|
||||
$debugLines = [];
|
||||
|
||||
$debugLines[] = 'Data: '.$this->qrCode->getData();
|
||||
$debugLines[] = 'Encoding: '.$this->qrCode->getEncoding();
|
||||
$debugLines[] = 'Error Correction Level: '.get_class($this->qrCode->getErrorCorrectionLevel());
|
||||
$debugLines[] = 'Size: '.$this->qrCode->getSize();
|
||||
$debugLines[] = 'Margin: '.$this->qrCode->getMargin();
|
||||
$debugLines[] = 'Round block size mode: '.get_class($this->qrCode->getRoundBlockSizeMode());
|
||||
$debugLines[] = 'Foreground color: ['.implode(', ', $this->qrCode->getForegroundColor()->toArray()).']';
|
||||
$debugLines[] = 'Background color: ['.implode(', ', $this->qrCode->getBackgroundColor()->toArray()).']';
|
||||
|
||||
foreach ($this->options as $key => $value) {
|
||||
$debugLines[] = 'Writer option: '.$key.': '.$value;
|
||||
}
|
||||
|
||||
if (isset($this->logo)) {
|
||||
$debugLines[] = 'Logo path: '.$this->logo->getPath();
|
||||
$debugLines[] = 'Logo resize to width: '.$this->logo->getResizeToWidth();
|
||||
$debugLines[] = 'Logo resize to height: '.$this->logo->getResizeToHeight();
|
||||
}
|
||||
|
||||
if (isset($this->label)) {
|
||||
$debugLines[] = 'Label text: '.$this->label->getText();
|
||||
$debugLines[] = 'Label font path: '.$this->label->getFont()->getPath();
|
||||
$debugLines[] = 'Label font size: '.$this->label->getFont()->getSize();
|
||||
$debugLines[] = 'Label alignment: '.get_class($this->label->getAlignment());
|
||||
$debugLines[] = 'Label margin: ['.implode(', ', $this->label->getMargin()->toArray()).']';
|
||||
$debugLines[] = 'Label text color: ['.implode(', ', $this->label->getTextColor()->toArray()).']';
|
||||
}
|
||||
|
||||
$debugLines[] = 'Validate result: '.($this->validateResult ? 'true' : 'false');
|
||||
|
||||
return implode("\n", $debugLines);
|
||||
}
|
||||
|
||||
public function getMimeType(): string
|
||||
{
|
||||
return 'text/plain';
|
||||
}
|
||||
}
|
||||
28
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/Result/EpsResult.php
vendored
Normal file
28
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/Result/EpsResult.php
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer\Result;
|
||||
|
||||
use Endroid\QrCode\Matrix\MatrixInterface;
|
||||
|
||||
final class EpsResult extends AbstractResult
|
||||
{
|
||||
public function __construct(
|
||||
MatrixInterface $matrix,
|
||||
/** @var array<string> $lines */
|
||||
private array $lines
|
||||
) {
|
||||
parent::__construct($matrix);
|
||||
}
|
||||
|
||||
public function getString(): string
|
||||
{
|
||||
return implode("\n", $this->lines);
|
||||
}
|
||||
|
||||
public function getMimeType(): string
|
||||
{
|
||||
return 'image/eps';
|
||||
}
|
||||
}
|
||||
32
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/Result/GdResult.php
vendored
Normal file
32
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/Result/GdResult.php
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer\Result;
|
||||
|
||||
use Endroid\QrCode\Matrix\MatrixInterface;
|
||||
|
||||
class GdResult extends AbstractResult
|
||||
{
|
||||
public function __construct(
|
||||
MatrixInterface $matrix,
|
||||
protected \GdImage $image
|
||||
) {
|
||||
parent::__construct($matrix);
|
||||
}
|
||||
|
||||
public function getImage(): \GdImage
|
||||
{
|
||||
return $this->image;
|
||||
}
|
||||
|
||||
public function getString(): string
|
||||
{
|
||||
throw new \Exception('You can only use this method in a concrete implementation');
|
||||
}
|
||||
|
||||
public function getMimeType(): string
|
||||
{
|
||||
throw new \Exception('You can only use this method in a concrete implementation');
|
||||
}
|
||||
}
|
||||
21
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/Result/GifResult.php
vendored
Normal file
21
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/Result/GifResult.php
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer\Result;
|
||||
|
||||
final class GifResult extends GdResult
|
||||
{
|
||||
public function getString(): string
|
||||
{
|
||||
ob_start();
|
||||
imagegif($this->image);
|
||||
|
||||
return strval(ob_get_clean());
|
||||
}
|
||||
|
||||
public function getMimeType(): string
|
||||
{
|
||||
return 'image/gif';
|
||||
}
|
||||
}
|
||||
32
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/Result/PdfResult.php
vendored
Normal file
32
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/Result/PdfResult.php
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer\Result;
|
||||
|
||||
use Endroid\QrCode\Matrix\MatrixInterface;
|
||||
|
||||
final class PdfResult extends AbstractResult
|
||||
{
|
||||
public function __construct(
|
||||
MatrixInterface $matrix,
|
||||
private \FPDF $fpdf
|
||||
) {
|
||||
parent::__construct($matrix);
|
||||
}
|
||||
|
||||
public function getPdf(): \FPDF
|
||||
{
|
||||
return $this->fpdf;
|
||||
}
|
||||
|
||||
public function getString(): string
|
||||
{
|
||||
return $this->fpdf->Output('S');
|
||||
}
|
||||
|
||||
public function getMimeType(): string
|
||||
{
|
||||
return 'application/pdf';
|
||||
}
|
||||
}
|
||||
31
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/Result/PngResult.php
vendored
Normal file
31
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/Result/PngResult.php
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer\Result;
|
||||
|
||||
use Endroid\QrCode\Matrix\MatrixInterface;
|
||||
|
||||
final class PngResult extends GdResult
|
||||
{
|
||||
private int $quality;
|
||||
|
||||
public function __construct(MatrixInterface $matrix, \GdImage $image, int $quality = -1)
|
||||
{
|
||||
parent::__construct($matrix, $image);
|
||||
$this->quality = $quality;
|
||||
}
|
||||
|
||||
public function getString(): string
|
||||
{
|
||||
ob_start();
|
||||
imagepng($this->image, quality: $this->quality);
|
||||
|
||||
return strval(ob_get_clean());
|
||||
}
|
||||
|
||||
public function getMimeType(): string
|
||||
{
|
||||
return 'image/png';
|
||||
}
|
||||
}
|
||||
20
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/Result/ResultInterface.php
vendored
Normal file
20
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/Result/ResultInterface.php
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer\Result;
|
||||
|
||||
use Endroid\QrCode\Matrix\MatrixInterface;
|
||||
|
||||
interface ResultInterface
|
||||
{
|
||||
public function getMatrix(): MatrixInterface;
|
||||
|
||||
public function getString(): string;
|
||||
|
||||
public function getDataUri(): string;
|
||||
|
||||
public function saveToFile(string $path): void;
|
||||
|
||||
public function getMimeType(): string;
|
||||
}
|
||||
43
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/Result/SvgResult.php
vendored
Normal file
43
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/Result/SvgResult.php
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer\Result;
|
||||
|
||||
use Endroid\QrCode\Matrix\MatrixInterface;
|
||||
|
||||
final class SvgResult extends AbstractResult
|
||||
{
|
||||
public function __construct(
|
||||
MatrixInterface $matrix,
|
||||
private \SimpleXMLElement $xml,
|
||||
private bool $excludeXmlDeclaration = false
|
||||
) {
|
||||
parent::__construct($matrix);
|
||||
}
|
||||
|
||||
public function getXml(): \SimpleXMLElement
|
||||
{
|
||||
return $this->xml;
|
||||
}
|
||||
|
||||
public function getString(): string
|
||||
{
|
||||
$string = $this->xml->asXML();
|
||||
|
||||
if (!is_string($string)) {
|
||||
throw new \Exception('Could not save SVG XML to string');
|
||||
}
|
||||
|
||||
if ($this->excludeXmlDeclaration) {
|
||||
$string = str_replace("<?xml version=\"1.0\"?>\n", '', $string);
|
||||
}
|
||||
|
||||
return $string;
|
||||
}
|
||||
|
||||
public function getMimeType(): string
|
||||
{
|
||||
return 'image/svg+xml';
|
||||
}
|
||||
}
|
||||
35
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/Result/WebPResult.php
vendored
Normal file
35
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/Result/WebPResult.php
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer\Result;
|
||||
|
||||
use Endroid\QrCode\Matrix\MatrixInterface;
|
||||
|
||||
final class WebPResult extends GdResult
|
||||
{
|
||||
private int $quality;
|
||||
|
||||
public function __construct(MatrixInterface $matrix, \GdImage $image, int $quality = -1)
|
||||
{
|
||||
parent::__construct($matrix, $image);
|
||||
$this->quality = $quality;
|
||||
}
|
||||
|
||||
public function getString(): string
|
||||
{
|
||||
if (!function_exists('imagewebp')) {
|
||||
throw new \Exception('WebP support is not available in your GD installation');
|
||||
}
|
||||
|
||||
ob_start();
|
||||
imagewebp($this->image, quality: $this->quality);
|
||||
|
||||
return strval(ob_get_clean());
|
||||
}
|
||||
|
||||
public function getMimeType(): string
|
||||
{
|
||||
return 'image/webp';
|
||||
}
|
||||
}
|
||||
114
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/SvgWriter.php
vendored
Normal file
114
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/SvgWriter.php
vendored
Normal file
@@ -0,0 +1,114 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer;
|
||||
|
||||
use Endroid\QrCode\Bacon\MatrixFactory;
|
||||
use Endroid\QrCode\ImageData\LogoImageData;
|
||||
use Endroid\QrCode\Label\LabelInterface;
|
||||
use Endroid\QrCode\Logo\LogoInterface;
|
||||
use Endroid\QrCode\QrCodeInterface;
|
||||
use Endroid\QrCode\Writer\Result\ResultInterface;
|
||||
use Endroid\QrCode\Writer\Result\SvgResult;
|
||||
|
||||
final class SvgWriter implements WriterInterface
|
||||
{
|
||||
public const DECIMAL_PRECISION = 10;
|
||||
public const WRITER_OPTION_BLOCK_ID = 'block_id';
|
||||
public const WRITER_OPTION_EXCLUDE_XML_DECLARATION = 'exclude_xml_declaration';
|
||||
public const WRITER_OPTION_EXCLUDE_SVG_WIDTH_AND_HEIGHT = 'exclude_svg_width_and_height';
|
||||
public const WRITER_OPTION_FORCE_XLINK_HREF = 'force_xlink_href';
|
||||
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface|null $logo = null, LabelInterface|null $label = null, array $options = []): ResultInterface
|
||||
{
|
||||
if (!isset($options[self::WRITER_OPTION_BLOCK_ID])) {
|
||||
$options[self::WRITER_OPTION_BLOCK_ID] = 'block';
|
||||
}
|
||||
|
||||
if (!isset($options[self::WRITER_OPTION_EXCLUDE_XML_DECLARATION])) {
|
||||
$options[self::WRITER_OPTION_EXCLUDE_XML_DECLARATION] = false;
|
||||
}
|
||||
|
||||
if (!isset($options[self::WRITER_OPTION_EXCLUDE_SVG_WIDTH_AND_HEIGHT])) {
|
||||
$options[self::WRITER_OPTION_EXCLUDE_SVG_WIDTH_AND_HEIGHT] = false;
|
||||
}
|
||||
|
||||
$matrixFactory = new MatrixFactory();
|
||||
$matrix = $matrixFactory->create($qrCode);
|
||||
|
||||
$xml = new \SimpleXMLElement('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"/>');
|
||||
$xml->addAttribute('version', '1.1');
|
||||
if (!$options[self::WRITER_OPTION_EXCLUDE_SVG_WIDTH_AND_HEIGHT]) {
|
||||
$xml->addAttribute('width', $matrix->getOuterSize().'px');
|
||||
$xml->addAttribute('height', $matrix->getOuterSize().'px');
|
||||
}
|
||||
$xml->addAttribute('viewBox', '0 0 '.$matrix->getOuterSize().' '.$matrix->getOuterSize());
|
||||
$xml->addChild('defs');
|
||||
|
||||
$blockDefinition = $xml->defs->addChild('rect');
|
||||
$blockDefinition->addAttribute('id', strval($options[self::WRITER_OPTION_BLOCK_ID]));
|
||||
$blockDefinition->addAttribute('width', number_format($matrix->getBlockSize(), self::DECIMAL_PRECISION, '.', ''));
|
||||
$blockDefinition->addAttribute('height', number_format($matrix->getBlockSize(), self::DECIMAL_PRECISION, '.', ''));
|
||||
$blockDefinition->addAttribute('fill', '#'.sprintf('%02x%02x%02x', $qrCode->getForegroundColor()->getRed(), $qrCode->getForegroundColor()->getGreen(), $qrCode->getForegroundColor()->getBlue()));
|
||||
$blockDefinition->addAttribute('fill-opacity', strval($qrCode->getForegroundColor()->getOpacity()));
|
||||
|
||||
$background = $xml->addChild('rect');
|
||||
$background->addAttribute('x', '0');
|
||||
$background->addAttribute('y', '0');
|
||||
$background->addAttribute('width', strval($matrix->getOuterSize()));
|
||||
$background->addAttribute('height', strval($matrix->getOuterSize()));
|
||||
$background->addAttribute('fill', '#'.sprintf('%02x%02x%02x', $qrCode->getBackgroundColor()->getRed(), $qrCode->getBackgroundColor()->getGreen(), $qrCode->getBackgroundColor()->getBlue()));
|
||||
$background->addAttribute('fill-opacity', strval($qrCode->getBackgroundColor()->getOpacity()));
|
||||
|
||||
for ($rowIndex = 0; $rowIndex < $matrix->getBlockCount(); ++$rowIndex) {
|
||||
for ($columnIndex = 0; $columnIndex < $matrix->getBlockCount(); ++$columnIndex) {
|
||||
if (1 === $matrix->getBlockValue($rowIndex, $columnIndex)) {
|
||||
$block = $xml->addChild('use');
|
||||
$block->addAttribute('x', number_format($matrix->getMarginLeft() + $matrix->getBlockSize() * $columnIndex, self::DECIMAL_PRECISION, '.', ''));
|
||||
$block->addAttribute('y', number_format($matrix->getMarginLeft() + $matrix->getBlockSize() * $rowIndex, self::DECIMAL_PRECISION, '.', ''));
|
||||
$block->addAttribute('xlink:href', '#'.$options[self::WRITER_OPTION_BLOCK_ID], 'http://www.w3.org/1999/xlink');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$result = new SvgResult($matrix, $xml, boolval($options[self::WRITER_OPTION_EXCLUDE_XML_DECLARATION]));
|
||||
|
||||
if ($logo instanceof LogoInterface) {
|
||||
$this->addLogo($logo, $result, $options);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/** @param array<string, mixed> $options */
|
||||
private function addLogo(LogoInterface $logo, SvgResult $result, array $options): void
|
||||
{
|
||||
$logoImageData = LogoImageData::createForLogo($logo);
|
||||
|
||||
if (!isset($options[self::WRITER_OPTION_FORCE_XLINK_HREF])) {
|
||||
$options[self::WRITER_OPTION_FORCE_XLINK_HREF] = false;
|
||||
}
|
||||
|
||||
$xml = $result->getXml();
|
||||
|
||||
/** @var \SimpleXMLElement $xmlAttributes */
|
||||
$xmlAttributes = $xml->attributes();
|
||||
|
||||
$x = intval($xmlAttributes->width) / 2 - $logoImageData->getWidth() / 2;
|
||||
$y = intval($xmlAttributes->height) / 2 - $logoImageData->getHeight() / 2;
|
||||
|
||||
$imageDefinition = $xml->addChild('image');
|
||||
$imageDefinition->addAttribute('x', strval($x));
|
||||
$imageDefinition->addAttribute('y', strval($y));
|
||||
$imageDefinition->addAttribute('width', strval($logoImageData->getWidth()));
|
||||
$imageDefinition->addAttribute('height', strval($logoImageData->getHeight()));
|
||||
$imageDefinition->addAttribute('preserveAspectRatio', 'none');
|
||||
|
||||
if ($options[self::WRITER_OPTION_FORCE_XLINK_HREF]) {
|
||||
$imageDefinition->addAttribute('xlink:href', $logoImageData->createDataUri(), 'http://www.w3.org/1999/xlink');
|
||||
} else {
|
||||
$imageDefinition->addAttribute('href', $logoImageData->createDataUri());
|
||||
}
|
||||
}
|
||||
}
|
||||
12
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/ValidatingWriterInterface.php
vendored
Normal file
12
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/ValidatingWriterInterface.php
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer;
|
||||
|
||||
use Endroid\QrCode\Writer\Result\ResultInterface;
|
||||
|
||||
interface ValidatingWriterInterface
|
||||
{
|
||||
public function validateResult(ResultInterface $result, string $expectedData): void;
|
||||
}
|
||||
29
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/WebPWriter.php
vendored
Normal file
29
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/WebPWriter.php
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer;
|
||||
|
||||
use Endroid\QrCode\Label\LabelInterface;
|
||||
use Endroid\QrCode\Logo\LogoInterface;
|
||||
use Endroid\QrCode\QrCodeInterface;
|
||||
use Endroid\QrCode\Writer\Result\GdResult;
|
||||
use Endroid\QrCode\Writer\Result\ResultInterface;
|
||||
use Endroid\QrCode\Writer\Result\WebPResult;
|
||||
|
||||
final class WebPWriter extends AbstractGdWriter
|
||||
{
|
||||
public const WRITER_OPTION_QUALITY = 'quality';
|
||||
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface|null $logo = null, LabelInterface|null $label = null, array $options = []): ResultInterface
|
||||
{
|
||||
if (!isset($options[self::WRITER_OPTION_QUALITY])) {
|
||||
$options[self::WRITER_OPTION_QUALITY] = -1;
|
||||
}
|
||||
|
||||
/** @var GdResult $gdResult */
|
||||
$gdResult = parent::write($qrCode, $logo, $label, $options);
|
||||
|
||||
return new WebPResult($gdResult->getMatrix(), $gdResult->getImage(), $options[self::WRITER_OPTION_QUALITY]);
|
||||
}
|
||||
}
|
||||
16
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/WriterInterface.php
vendored
Normal file
16
pro_v3.5.1/vendor/endroid/qr-code/src/Writer/WriterInterface.php
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer;
|
||||
|
||||
use Endroid\QrCode\Label\LabelInterface;
|
||||
use Endroid\QrCode\Logo\LogoInterface;
|
||||
use Endroid\QrCode\QrCodeInterface;
|
||||
use Endroid\QrCode\Writer\Result\ResultInterface;
|
||||
|
||||
interface WriterInterface
|
||||
{
|
||||
/** @param array<string, mixed> $options */
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface|null $logo = null, LabelInterface|null $label = null, array $options = []): ResultInterface;
|
||||
}
|
||||
Reference in New Issue
Block a user