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..43dc1d8 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; @@ -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."); } /**