phplaravelintervention

Why calling Intervention\Image raised error Drivers\GD\Driver not found?


I installed intervention/image 3.5 on Laravel 10 app and got error :

Class "Intervention\Image\Drivers\GD\Driver" not found

With code :

use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\GD\Driver;

class GetImageProps
{
    public static function get(string $imageType, string $imagePath = null): array
    {
        $retArray = [];
        $storageFullImagePath = base_path() . '/storage/app/' . $imagePath;
        try {
            $manager = new ImageManager(new Driver()); // Error pointing this line
            $targetImage = $manager->read($storageFullImagePath);

I check that package is installed ok :

$ composer show intervention/image
name     : intervention/image
descrip. : PHP image manipulation
keywords : gd, image, imagick, resize, thumbnail, watermark
versions : * 3.5.0
type     : library
license  : MIT License (MIT) (OSI approved) https://spdx.org/licenses/MIT.html#licenseText
homepage : https://image.intervention.io/
source   : [git] https://github.com/Intervention/image.git 408d3655c7705339e8c79731ea7efb51546cfa10
dist     : [zip] https://api.github.com/repos/Intervention/image/zipball/408d3655c7705339e8c79731ea7efb51546cfa10 408d3655c7705339e8c79731ea7efb51546cfa10
path     : /mnt/_work_sdb8/wwwroot/lar/NewsPublisher/vendor/intervention/image
names    : intervention/image

support
issues : https://github.com/Intervention/image/issues
source : https://github.com/Intervention/image/tree/3.5.0

autoload
psr-4
Intervention\Image\ => src

requires
ext-mbstring *
intervention/gif ^4.0.1
php ^8.1

requires (dev)
mockery/mockery ^1.6
phpstan/phpstan ^1
phpunit/phpunit ^10.0
slevomat/coding-standard ~8.0
squizlabs/php_codesniffer ^3.8

suggests
ext-exif Recommended to be able to read EXIF data properly.

In output of phpinfo :

PHP Version 8.2.16

gd
GD Support  enabled
GD headers Version  2.3.3
GD library Version  2.3.3
FreeType Support    enabled

Do I need to some options to config/app.php ?

What is wrong ?


Solution

  • Although class names in PHP are not case sensitive, file names on a Unix-like system are. So when the autoloader looks for the class Intervention\Image\Drivers\GD\Driver it tries to open vendor/intervention/image/src/Drivers/GD/Driver.php but the actual file is vendor/intervention/image/src/Drivers/Gd/Driver.php (lower-case "d" in "Gd").

    You just need to change this line:

    use Intervention\Image\Drivers\GD\Driver;
    

    to:

    use Intervention\Image\Drivers\Gd\Driver;