From 713ecea0d5c52d0fe3b6ed744e16b43109763455 Mon Sep 17 00:00:00 2001 From: Al Amin Ahamed Date: Tue, 31 Mar 2026 07:48:26 +0600 Subject: [PATCH] Intervention Image v3 support (#45) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: type error to assign the drie for image manager class * fix: update package names and handle Intervention Image versioning in favicon generation * fix: update intervention/image version constraint in composer.json * cleanup, run CI tests with both intervention v2 and v3 * ci: composer require --dev * phpstan fixes --------- Co-authored-by: Samuel Ć tancl --- .github/workflows/ci.yml | 7 ++-- composer.json | 4 +-- phpstan.neon | 2 +- src/Commands/GenerateFaviconsCommand.php | 42 +++++++++++++++++------- 4 files changed, 38 insertions(+), 17 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f605e2f..07a1faf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,11 +7,12 @@ on: jobs: pest: - name: Tests (Pest) L${{ matrix.laravel }} + name: Tests (Pest) L${{ matrix.laravel }} I${{ matrix.intervention }} runs-on: ubuntu-latest strategy: matrix: laravel: [10, 11, 12, 13] + intervention: [2, 3] steps: - uses: actions/checkout@v2 @@ -20,7 +21,9 @@ jobs: with: php-version: 8.3 - name: Install composer dependencies - run: composer require "laravel/framework:^${{matrix.laravel}}.0" + run: | + composer require --dev "laravel/framework:^${{matrix.laravel}}.0" + composer require --dev "intervention/image:^${{matrix.intervention}}.0" - name: Run tests run: vendor/bin/pest diff --git a/composer.json b/composer.json index ba515fc..864d480 100644 --- a/composer.json +++ b/composer.json @@ -29,10 +29,10 @@ }, "require-dev": { "orchestra/testbench": ">=8.0", - "nunomaduro/larastan": ">=2.4", + "larastan/larastan": ">=2.4", "pestphp/pest": ">=2.0", "pestphp/pest-plugin-laravel": ">=2.0", - "intervention/image": "^2.7" + "intervention/image": "^3.0" }, "extra": { "laravel": { diff --git a/phpstan.neon b/phpstan.neon index d8f0cf3..0f34444 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -1,5 +1,5 @@ includes: - - ./vendor/nunomaduro/larastan/extension.neon + - ./vendor/larastan/larastan/extension.neon parameters: paths: diff --git a/src/Commands/GenerateFaviconsCommand.php b/src/Commands/GenerateFaviconsCommand.php index 7ec7896..8b3c05c 100644 --- a/src/Commands/GenerateFaviconsCommand.php +++ b/src/Commands/GenerateFaviconsCommand.php @@ -37,22 +37,40 @@ class GenerateFaviconsCommand extends Command return self::FAILURE; } - // GD driver doesn't support .ico, that's why we use ImageMagick. - $manager = new ImageManager(['driver' => 'imagick']); + // Check Intervention Image version + $interventionV3 = interface_exists('\Intervention\Image\Interfaces\DriverInterface'); - $this->comment('Generating ico...'); + if ($interventionV3) { + // v3.x implementation + $manager = new ImageManager( + new \Intervention\Image\Drivers\Imagick\Driver() + ); - $manager - ->make($path) - ->resize(32, 32) - ->save(public_path('favicon.ico')); + $this->comment('Generating ico...'); + $image = $manager->read($path); + $image->resize(32, 32); + $image->save(public_path('favicon.ico')); - $this->comment('Generating png...'); + $this->comment('Generating png...'); + $image = $manager->read($path); + $image->resize(32, 32); + $image->save(public_path('favicon.png')); + } else { + // v2.x implementation + $manager = new ImageManager(['driver' => 'imagick']); // @phpstan-ignore argument.type - $manager - ->make($path) - ->resize(32, 32) - ->save(public_path('favicon.png')); + $this->comment('Generating ico...'); + $manager + ->make($path) // @phpstan-ignore method.notFound + ->resize(32, 32) + ->save(public_path('favicon.ico')); + + $this->comment('Generating png...'); + $manager + ->make($path) // @phpstan-ignore method.notFound + ->resize(32, 32) + ->save(public_path('favicon.png')); + } $this->info('All favicons have been generated!');