From d993db152fec25a315028cf892c4a5ad5ba475f7 Mon Sep 17 00:00:00 2001 From: Farhan Date: Mon, 15 Apr 2024 17:50:58 +0800 Subject: [PATCH 1/2] Add support for GD library --- composer.json | 4 ++-- src/Generator.php | 44 +++++++++++++++++++++++++++++--------------- 2 files changed, 31 insertions(+), 17 deletions(-) diff --git a/composer.json b/composer.json index 8594a91..38d05a3 100644 --- a/composer.json +++ b/composer.json @@ -11,9 +11,9 @@ } ], "require": { - "php": ">=7.2|^8.0", + "php": "^8.1", "ext-gd": "*", - "bacon/bacon-qr-code": "^2.0" + "bacon/bacon-qr-code": "dev-main" }, "require-dev": { "mockery/mockery": "~1", diff --git a/src/Generator.php b/src/Generator.php index 4ada416..0047566 100644 --- a/src/Generator.php +++ b/src/Generator.php @@ -12,11 +12,12 @@ use BaconQrCode\Renderer\Eye\ModuleEye; use BaconQrCode\Renderer\Eye\SimpleCircleEye; use BaconQrCode\Renderer\Eye\SquareEye; +use BaconQrCode\Renderer\GDLibRenderer; +use BaconQrCode\Renderer\ImageRenderer; use BaconQrCode\Renderer\Image\EpsImageBackEnd; use BaconQrCode\Renderer\Image\ImageBackEndInterface; use BaconQrCode\Renderer\Image\ImagickImageBackEnd; use BaconQrCode\Renderer\Image\SvgImageBackEnd; -use BaconQrCode\Renderer\ImageRenderer; use BaconQrCode\Renderer\Module\DotsModule; use BaconQrCode\Renderer\Module\ModuleInterface; use BaconQrCode\Renderer\Module\RoundnessModule; @@ -198,8 +199,8 @@ public function generate(string $text, string $filename = null) */ public function merge(string $filepath, float $percentage = .2, bool $absolute = false): self { - if (function_exists('base_path') && ! $absolute) { - $filepath = base_path().$filepath; + if (function_exists('base_path') && !$absolute) { + $filepath = base_path() . $filepath; } $this->imageMerge = file_get_contents($filepath); @@ -245,7 +246,7 @@ public function size(int $pixels): self */ public function format(string $format): self { - if (! in_array($format, ['svg', 'eps', 'png'])) { + if (!in_array($format, ['svg', 'eps', 'png'])) { throw new InvalidArgumentException("\$format must be svg, eps, or png. {$format} is not a valid."); } @@ -334,7 +335,7 @@ public function gradient($startRed, $startGreen, $startBlue, $endRed, $endGreen, */ public function eye(string $style): self { - if (! in_array($style, ['square', 'circle'])) { + if (!in_array($style, ['square', 'circle'])) { throw new InvalidArgumentException("\$style must be square or circle. {$style} is not a valid eye style."); } @@ -353,7 +354,7 @@ public function eye(string $style): self */ public function style(string $style, float $size = 0.5): self { - if (! in_array($style, ['square', 'dot', 'round'])) { + if (!in_array($style, ['square', 'dot', 'round'])) { throw new InvalidArgumentException("\$style must be square, dot, or round. {$style} is not a valid."); } @@ -423,7 +424,7 @@ public function margin(int $margin): self * @param ImageRenderer $renderer * @return Writer */ - public function getWriter(ImageRenderer $renderer): Writer + public function getWriter(ImageRenderer|GDLibRenderer $renderer): Writer { return new Writer($renderer); } @@ -433,14 +434,27 @@ public function getWriter(ImageRenderer $renderer): Writer * * @return ImageRenderer */ - public function getRenderer(): ImageRenderer + public function getRenderer(): ImageRenderer | GDLibRenderer { - $renderer = new ImageRenderer( - $this->getRendererStyle(), - $this->getFormatter() - ); + if (extension_loaded('imagick')) { + $renderer = new ImageRenderer( + $this->getRendererStyle(), + $this->getFormatter() + ); + + return $renderer; + } elseif (extension_loaded('gd')) { + $renderer = new GDLibRenderer( + size: $this->pixels, + margin: $this->margin, + imageFormat: $this->format, + fill: $this->getFill() + ); + + return $renderer; + } - return $renderer; + throw new InvalidArgumentException("You need to install either Imagick or GD extension."); } /** @@ -554,7 +568,7 @@ protected function createClass(string $method): DataTypeInterface { $class = $this->formatClass($method); - if (! class_exists($class)) { + if (!class_exists($class)) { throw new BadMethodCallException(); } @@ -571,7 +585,7 @@ protected function formatClass(string $method): string { $method = ucfirst($method); - $class = "SimpleSoftwareIO\QrCode\DataTypes\\".$method; + $class = "SimpleSoftwareIO\QrCode\DataTypes\\" . $method; return $class; } From b7d084a7ad1839febbaf13ee54fe2260fc5de584 Mon Sep 17 00:00:00 2001 From: Farhan Date: Wed, 17 Apr 2024 10:20:28 +0800 Subject: [PATCH 2/2] Update formatter --- src/Generator.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Generator.php b/src/Generator.php index 0047566..43dc1d8 100644 --- a/src/Generator.php +++ b/src/Generator.php @@ -199,8 +199,8 @@ public function generate(string $text, string $filename = null) */ public function merge(string $filepath, float $percentage = .2, bool $absolute = false): self { - if (function_exists('base_path') && !$absolute) { - $filepath = base_path() . $filepath; + if (function_exists('base_path') && ! $absolute) { + $filepath = base_path().$filepath; } $this->imageMerge = file_get_contents($filepath); @@ -246,7 +246,7 @@ public function size(int $pixels): self */ public function format(string $format): self { - if (!in_array($format, ['svg', 'eps', 'png'])) { + if (! in_array($format, ['svg', 'eps', 'png'])) { throw new InvalidArgumentException("\$format must be svg, eps, or png. {$format} is not a valid."); } @@ -335,7 +335,7 @@ public function gradient($startRed, $startGreen, $startBlue, $endRed, $endGreen, */ public function eye(string $style): self { - if (!in_array($style, ['square', 'circle'])) { + if (! in_array($style, ['square', 'circle'])) { throw new InvalidArgumentException("\$style must be square or circle. {$style} is not a valid eye style."); } @@ -354,7 +354,7 @@ public function eye(string $style): self */ public function style(string $style, float $size = 0.5): self { - if (!in_array($style, ['square', 'dot', 'round'])) { + if (! in_array($style, ['square', 'dot', 'round'])) { throw new InvalidArgumentException("\$style must be square, dot, or round. {$style} is not a valid."); } @@ -424,7 +424,7 @@ public function margin(int $margin): self * @param ImageRenderer $renderer * @return Writer */ - public function getWriter(ImageRenderer|GDLibRenderer $renderer): Writer + public function getWriter(ImageRenderer | GDLibRenderer $renderer): Writer { return new Writer($renderer); } @@ -568,7 +568,7 @@ protected function createClass(string $method): DataTypeInterface { $class = $this->formatClass($method); - if (!class_exists($class)) { + if (! class_exists($class)) { throw new BadMethodCallException(); } @@ -585,7 +585,7 @@ protected function formatClass(string $method): string { $method = ucfirst($method); - $class = "SimpleSoftwareIO\QrCode\DataTypes\\" . $method; + $class = "SimpleSoftwareIO\QrCode\DataTypes\\".$method; return $class; }