PluginProbe ʕ •ᴥ•ʔ
WP 2FA – Two-factor authentication for WordPress / 2.9.2
WP 2FA – Two-factor authentication for WordPress v2.9.2
4.0.0 1.7.1 2.0.0 2.0.1 2.1.0 2.2.0 2.2.1 2.3.0 2.4.0 2.4.1 2.4.2 2.5.0 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.8.0 2.9.0 2.9.1 2.9.2 2.9.3 3.0.0 3.0.1 3.1.0 3.1.1 3.1.1.2 trunk 1.2.0 1.3.0 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.6.0 1.6.1 1.6.2 1.7.0
wp-2fa / includes / classes / bacon / bacon-qr-code / src / Renderer / ImageRenderer.php
wp-2fa / includes / classes / bacon / bacon-qr-code / src / Renderer Last commit date
Color 11 months ago Eye 11 months ago Image 11 months ago Module 11 months ago Path 11 months ago RendererStyle 11 months ago ImageRenderer.php 11 months ago PlainTextRenderer.php 11 months ago RendererInterface.php 11 months ago
ImageRenderer.php
92 lines
1 <?php
2
3 declare (strict_types=1);
4 namespace WP2FA_Vendor\BaconQrCode\Renderer;
5
6 use WP2FA_Vendor\BaconQrCode\Encoder\MatrixUtil;
7 use WP2FA_Vendor\BaconQrCode\Encoder\QrCode;
8 use WP2FA_Vendor\BaconQrCode\Exception\InvalidArgumentException;
9 use WP2FA_Vendor\BaconQrCode\Renderer\Image\ImageBackEndInterface;
10 use WP2FA_Vendor\BaconQrCode\Renderer\Path\Path;
11 use WP2FA_Vendor\BaconQrCode\Renderer\RendererStyle\EyeFill;
12 use WP2FA_Vendor\BaconQrCode\Renderer\RendererStyle\RendererStyle;
13 final class ImageRenderer implements RendererInterface
14 {
15 /**
16 * @var RendererStyle
17 */
18 private $rendererStyle;
19 /**
20 * @var ImageBackEndInterface
21 */
22 private $imageBackEnd;
23 public function __construct(RendererStyle $rendererStyle, ImageBackEndInterface $imageBackEnd)
24 {
25 $this->rendererStyle = $rendererStyle;
26 $this->imageBackEnd = $imageBackEnd;
27 }
28 /**
29 * @throws InvalidArgumentException if matrix width doesn't match height
30 */
31 public function render(QrCode $qrCode) : string
32 {
33 $size = $this->rendererStyle->getSize();
34 $margin = $this->rendererStyle->getMargin();
35 $matrix = $qrCode->getMatrix();
36 $matrixSize = $matrix->getWidth();
37 if ($matrixSize !== $matrix->getHeight()) {
38 throw new InvalidArgumentException('Matrix must have the same width and height');
39 }
40 $totalSize = $matrixSize + $margin * 2;
41 $moduleSize = $size / $totalSize;
42 $fill = $this->rendererStyle->getFill();
43 $this->imageBackEnd->new($size, $fill->getBackgroundColor());
44 $this->imageBackEnd->scale((float) $moduleSize);
45 $this->imageBackEnd->translate((float) $margin, (float) $margin);
46 $module = $this->rendererStyle->getModule();
47 $moduleMatrix = clone $matrix;
48 MatrixUtil::removePositionDetectionPatterns($moduleMatrix);
49 $modulePath = $this->drawEyes($matrixSize, $module->createPath($moduleMatrix));
50 if ($fill->hasGradientFill()) {
51 $this->imageBackEnd->drawPathWithGradient($modulePath, $fill->getForegroundGradient(), 0, 0, $matrixSize, $matrixSize);
52 } else {
53 $this->imageBackEnd->drawPathWithColor($modulePath, $fill->getForegroundColor());
54 }
55 return $this->imageBackEnd->done();
56 }
57 private function drawEyes(int $matrixSize, Path $modulePath) : Path
58 {
59 $fill = $this->rendererStyle->getFill();
60 $eye = $this->rendererStyle->getEye();
61 $externalPath = $eye->getExternalPath();
62 $internalPath = $eye->getInternalPath();
63 $modulePath = $this->drawEye($externalPath, $internalPath, $fill->getTopLeftEyeFill(), 3.5, 3.5, 0, $modulePath);
64 $modulePath = $this->drawEye($externalPath, $internalPath, $fill->getTopRightEyeFill(), $matrixSize - 3.5, 3.5, 90, $modulePath);
65 $modulePath = $this->drawEye($externalPath, $internalPath, $fill->getBottomLeftEyeFill(), 3.5, $matrixSize - 3.5, -90, $modulePath);
66 return $modulePath;
67 }
68 private function drawEye(Path $externalPath, Path $internalPath, EyeFill $fill, float $xTranslation, float $yTranslation, int $rotation, Path $modulePath) : Path
69 {
70 if ($fill->inheritsBothColors()) {
71 return $modulePath->append($externalPath->translate($xTranslation, $yTranslation))->append($internalPath->translate($xTranslation, $yTranslation));
72 }
73 $this->imageBackEnd->push();
74 $this->imageBackEnd->translate($xTranslation, $yTranslation);
75 if (0 !== $rotation) {
76 $this->imageBackEnd->rotate($rotation);
77 }
78 if ($fill->inheritsExternalColor()) {
79 $modulePath = $modulePath->append($externalPath->translate($xTranslation, $yTranslation));
80 } else {
81 $this->imageBackEnd->drawPathWithColor($externalPath, $fill->getExternalColor());
82 }
83 if ($fill->inheritsInternalColor()) {
84 $modulePath = $modulePath->append($internalPath->translate($xTranslation, $yTranslation));
85 } else {
86 $this->imageBackEnd->drawPathWithColor($internalPath, $fill->getInternalColor());
87 }
88 $this->imageBackEnd->pop();
89 return $modulePath;
90 }
91 }
92