Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/vendor/endroid/qr-code/src/Matrix/ |
Upload File : |
<?php declare(strict_types=1); namespace Endroid\QrCode\Matrix; use Endroid\QrCode\RoundBlockSizeMode; final class Matrix implements MatrixInterface { private readonly float $blockSize; private readonly int $innerSize; private readonly int $outerSize; private readonly int $marginLeft; private readonly int $marginRight; /** @param array<array<int>> $blockValues */ public function __construct( private array $blockValues, int $size, int $margin, RoundBlockSizeMode $roundBlockSizeMode ) { $blockSize = $size / $this->getBlockCount(); $innerSize = $size; $outerSize = $size + 2 * $margin; switch ($roundBlockSizeMode) { case RoundBlockSizeMode::Enlarge: $blockSize = intval(ceil($blockSize)); $innerSize = intval($blockSize * $this->getBlockCount()); $outerSize = $innerSize + 2 * $margin; break; case RoundBlockSizeMode::Shrink: $blockSize = intval(floor($blockSize)); $innerSize = intval($blockSize * $this->getBlockCount()); $outerSize = $innerSize + 2 * $margin; break; case RoundBlockSizeMode::Margin: $blockSize = intval(floor($blockSize)); $innerSize = intval($blockSize * $this->getBlockCount()); break; } if ($blockSize < 1) { throw new \Exception('Too much data: increase image dimensions or lower error correction level'); } $this->blockSize = $blockSize; $this->innerSize = $innerSize; $this->outerSize = $outerSize; $this->marginLeft = intval(($this->outerSize - $this->innerSize) / 2); $this->marginRight = $this->outerSize - $this->innerSize - $this->marginLeft; } public function getBlockValue(int $rowIndex, int $columnIndex): int { return $this->blockValues[$rowIndex][$columnIndex]; } public function getBlockCount(): int { return count($this->blockValues[0]); } public function getBlockSize(): float { return $this->blockSize; } public function getInnerSize(): int { return $this->innerSize; } public function getOuterSize(): int { return $this->outerSize; } public function getMarginLeft(): int { return $this->marginLeft; } public function getMarginRight(): int { return $this->marginRight; } }