skip to Main Content

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

Class "InterventionImageDriversGDDriver" not found

With code :

use InterventionImageImageManager;
use InterventionImageDriversGDDriver;

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
InterventionImage => 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 ?

2

Answers


  1. By the documentantion, follow this in installation:

    require './vendor/autoload.php';
     
    use InterventionImageImageManager;
    use InterventionImageDriversImagickDriver;
    
    // create new manager instance with desired driver
    $manager = new ImageManager(new Driver());
    
    //or
    // alternatively create new manager instance by class name
    // $manager = new ImageManager(Driver::class);
    

    TLDR: To correct, your code is:

    use InterventionImageDriversGDDriver;
    

    To this:

    use InterventionImageDriversImagickDriver;
    

    Check more to create a new Image Manager Instance here

    Login or Signup to reply.
  2. 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 InterventionImageDriversGDDriver it tries to open vendor/intervention/image/src/Drivers/GD/Driver.php but that actual file is vendor/intervention/image/src/Drivers/GD/Driver.php

    You just need to change this line:

    use InterventionImageDriversGDDriver;
    

    to:

    use InterventionImageDriversGdDriver;
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search