From e6d611de2c93f2225bf4e389a1c91a80e71d4843 Mon Sep 17 00:00:00 2001 From: Alexandros Paliampelos Date: Tue, 22 Jul 2025 15:50:03 +0300 Subject: [PATCH 1/2] Fix old implementation of intervention/image (required release does not exist) --- composer.json | 14 +++++------ src/Controllers/CropController.php | 24 +++++++++--------- src/Controllers/ResizeController.php | 30 +++++++++++------------ src/LaravelFilemanagerServiceProvider.php | 28 ++++++++++++++++++++- src/LfmPath.php | 24 +++++++----------- src/Services/ImageService.php | 29 ++++++++++++++++++++++ src/config/lfm.php | 2 ++ 7 files changed, 100 insertions(+), 51 deletions(-) create mode 100644 src/Services/ImageService.php diff --git a/composer.json b/composer.json index 00000b8a..5dd38bd0 100644 --- a/composer.json +++ b/composer.json @@ -23,15 +23,15 @@ } ], "require": { - "php": ">=7.2.0", + "php": ">=8.1", "ext-exif": "*", "ext-fileinfo": "*", - "intervention/image": ">=2.0.0", - "illuminate/config": "5.4.* || 5.5.* || 5.6.* || 5.7.* || 5.8.* || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0 || ^11.0 || ^12.0", - "illuminate/filesystem": "5.4.* || 5.5.* || 5.6.* || 5.7.* || 5.8.* || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0 || ^11.0 || ^12.0", - "illuminate/support": "5.4.* || 5.5.* || 5.6.* || 5.7.* || 5.8.* || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0 || ^11.0 || ^12.0", - "illuminate/http": "5.4.* || 5.5.* || 5.6.* || 5.7.* || 5.8.* || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0 || ^11.0 || ^12.0", - "illuminate/container": "5.4.* || 5.5.* || 5.6.* || 5.7.* || 5.8.* || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0 || ^11.0 || ^12.0", + "intervention/image": ">=3.11.3", + "illuminate/config": "^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0 || ^11.0 || ^12.0", + "illuminate/filesystem": "^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0 || ^11.0 || ^12.0", + "illuminate/support": "^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0 || ^11.0 || ^12.0", + "illuminate/http": "^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0 || ^11.0 || ^12.0", + "illuminate/container": "^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0 || ^11.0 || ^12.0", "league/flysystem": ">=2.0.0" }, "require-dev": { diff --git a/src/Controllers/CropController.php b/src/Controllers/CropController.php index ba256e56..87ac1a16 100644 --- a/src/Controllers/CropController.php +++ b/src/Controllers/CropController.php @@ -2,13 +2,20 @@ namespace UniSharp\LaravelFilemanager\Controllers; -use Intervention\Image\Facades\Image as InterventionImageV2; -use Intervention\Image\Laravel\Facades\Image as InterventionImageV3; +use UniSharp\LaravelFilemanager\Services\ImageService; use UniSharp\LaravelFilemanager\Events\ImageIsCropping; use UniSharp\LaravelFilemanager\Events\ImageWasCropped; class CropController extends LfmController { + private ImageService $imageService; + + public function __construct(ImageService $imageService) + { + $this->imageService = $imageService; + parent::__construct(); + } + /** * Show crop page. * @@ -42,16 +49,9 @@ public function getCropImage($overWrite = true) $crop_info = request()->only('dataWidth', 'dataHeight', 'dataX', 'dataY'); - // crop image - if (class_exists(InterventionImageV2::class)) { - InterventionImageV2::make($image_path) - ->crop(...array_values($crop_info)) - ->save($crop_path); - } else { - InterventionImageV3::read($image_path) - ->crop(...array_values($crop_info)) - ->save($crop_path); - } + $this->imageService->read($image_path) + ->crop(...array_values($crop_info)) + ->save($crop_path); // make new thumbnail $this->lfm->generateThumbnail($image_name); diff --git a/src/Controllers/ResizeController.php b/src/Controllers/ResizeController.php index e733eaeb..452e237f 100644 --- a/src/Controllers/ResizeController.php +++ b/src/Controllers/ResizeController.php @@ -2,13 +2,20 @@ namespace UniSharp\LaravelFilemanager\Controllers; -use Intervention\Image\Facades\Image as InterventionImageV2; -use Intervention\Image\Laravel\Facades\Image as InterventionImageV3; +use UniSharp\LaravelFilemanager\Services\ImageService; use UniSharp\LaravelFilemanager\Events\ImageIsResizing; use UniSharp\LaravelFilemanager\Events\ImageWasResized; class ResizeController extends LfmController { + private ImageService $imageService; + + public function __construct(ImageService $imageService) + { + $this->imageService = $imageService; + parent::__construct(); + } + /** * Dipsplay image for resizing. * @@ -19,11 +26,7 @@ public function getResize() $ratio = 1.0; $image = request('img'); - if (class_exists(InterventionImageV2::class)) { - $original_image = InterventionImageV2::make($this->lfm->setName($image)->path('absolute')); - } else { - $original_image = InterventionImageV3::read($this->lfm->setName($image)->path('absolute')); - } + $original_image = $this->imageService->read($this->lfm->setName($image)->path('absolute')); $original_width = $original_image->width(); $original_height = $original_image->height(); @@ -71,15 +74,10 @@ public function performResize($overWrite = true) event(new ImageIsResizing($image_path)); - if (class_exists(InterventionImageV2::class)) { - InterventionImageV2::make($image_path) - ->resize(request('dataWidth'), request('dataHeight')) - ->save($resize_path); - } else { - InterventionImageV3::read($image_path) - ->resize(request('dataWidth'), request('dataHeight')) - ->save($resize_path); - } + $this->imageService->read($image_path) + ->resize(request('dataWidth'), request('dataHeight')) + ->save($resize_path); + event(new ImageWasResized($image_path)); return parent::$success_response; diff --git a/src/LaravelFilemanagerServiceProvider.php b/src/LaravelFilemanagerServiceProvider.php index b57de295..6c9fd012 100644 --- a/src/LaravelFilemanagerServiceProvider.php +++ b/src/LaravelFilemanagerServiceProvider.php @@ -4,6 +4,11 @@ use Illuminate\Support\Facades\Route; use Illuminate\Support\ServiceProvider; +use Intervention\Image\Drivers\Gd\Driver as GdDriver; +use Intervention\Image\Drivers\Imagick\Driver as ImagickDriver; +use Intervention\Image\ImageManager; +use Intervention\Image\Interfaces\ImageManagerInterface; +use UniSharp\LaravelFilemanager\Services\ImageService; /** * Class LaravelFilemanagerServiceProvider. @@ -51,10 +56,31 @@ public function boot() */ public function register() { - $this->mergeConfigFrom(__DIR__ . '/config/lfm.php', 'lfm-config'); + $this->mergeConfigFrom(__DIR__ . '/config/lfm.php', 'lfm'); $this->app->singleton('laravel-filemanager', function () { return true; }); + + $this->app->singleton(ImageManagerInterface::class, function ($app) { + $driver = config('lfm.intervention_driver'); + + $driverInstance = match ($driver) { + 'gd' => new GdDriver(), + 'imagick' => new ImagickDriver(), + default => null, + }; + + if(is_null($driverInstance)) { + \Log::error("Unsupported image driver [$driver]. GdDriver will be used."); + $driverInstance = new GdDriver(); + } + + return new ImageManager($driverInstance); + }); + + $this->app->singleton(ImageService::class, function ($app) { + return new ImageService($app->make(ImageManagerInterface::class)); + }); } } diff --git a/src/LfmPath.php b/src/LfmPath.php index 8eb52daa..5d9f0ac0 100644 --- a/src/LfmPath.php +++ b/src/LfmPath.php @@ -3,9 +3,8 @@ namespace UniSharp\LaravelFilemanager; use Illuminate\Container\Container; -use Intervention\Image\Facades\Image as InterventionImageV2; -use Intervention\Image\Laravel\Facades\Image as InterventionImageV3; use Symfony\Component\HttpFoundation\File\UploadedFile; +use UniSharp\LaravelFilemanager\Services\ImageService; use UniSharp\LaravelFilemanager\Events\FileIsUploading; use UniSharp\LaravelFilemanager\Events\FileWasUploaded; use UniSharp\LaravelFilemanager\Events\ImageIsUploading; @@ -20,9 +19,12 @@ class LfmPath private $helper; - public function __construct(Lfm $lfm) + private ImageService $imageService; + + public function __construct(Lfm $lfm, ImageService $imageService) { $this->helper = $lfm; + $this->imageService = $imageService; } public function __get($var_name) @@ -325,18 +327,10 @@ public function generateThumbnail($file_name) $thumbWidth = $this->helper->shouldCreateCategoryThumb() && $this->helper->categoryThumbWidth() ? $this->helper->categoryThumbWidth() : config('lfm.thumb_img_width', 200); $thumbHeight = $this->helper->shouldCreateCategoryThumb() && $this->helper->categoryThumbHeight() ? $this->helper->categoryThumbHeight() : config('lfm.thumb_img_height', 200); - if (class_exists(InterventionImageV2::class)) { - $encoded_image = InterventionImageV2::make($original_image->get()) - ->fit($thumbWidth, $thumbHeight) - ->stream() - ->detach(); - } else { - $encoded_image = InterventionImageV3::read($original_image->get()) - ->cover($thumbWidth, $thumbHeight) - ->encodeByMediaType(); - } - - + $encoded_image = $this->imageService->read($original_image->get()) + ->cover($thumbWidth, $thumbHeight) + ->encodeByMediaType(); + $this->storage->put($encoded_image, 'public'); } } diff --git a/src/Services/ImageService.php b/src/Services/ImageService.php new file mode 100644 index 00000000..f46163a2 --- /dev/null +++ b/src/Services/ImageService.php @@ -0,0 +1,29 @@ +imageManager = $imageManager; + } + + /** + * Dynamically forward method calls to the underlying ImageManagerInterface. + */ + public function __call(string $method, array $arguments) + { + if (method_exists($this->imageManager, $method)) { + return $this->imageManager->$method(...$arguments); + } + + throw new \BadMethodCallException("Method {$method} does not exist on ImageService or ImageManagerInterface."); + } + +} diff --git a/src/config/lfm.php b/src/config/lfm.php index 70e7fd3f..63324ff3 100644 --- a/src/config/lfm.php +++ b/src/config/lfm.php @@ -179,4 +179,6 @@ 'php_ini_overrides' => [ 'memory_limit' => '256M', ], + + 'intervention_driver' => 'gd', // options: gd, imagick ]; From 6087ea9359ab12fd9fa0d9012ac85005077e0c24 Mon Sep 17 00:00:00 2001 From: Alexandros Paliampelos Date: Thu, 24 Jul 2025 20:23:53 +0300 Subject: [PATCH 2/2] format files --- src/LaravelFilemanagerServiceProvider.php | 14 +++++++------- src/Services/ImageService.php | 1 - 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/LaravelFilemanagerServiceProvider.php b/src/LaravelFilemanagerServiceProvider.php index 6c9fd012..c701c947 100644 --- a/src/LaravelFilemanagerServiceProvider.php +++ b/src/LaravelFilemanagerServiceProvider.php @@ -22,24 +22,24 @@ class LaravelFilemanagerServiceProvider extends ServiceProvider */ public function boot() { - $this->loadTranslationsFrom(__DIR__.'/lang', 'laravel-filemanager'); + $this->loadTranslationsFrom(__DIR__ . '/lang', 'laravel-filemanager'); - $this->loadViewsFrom(__DIR__.'/views', 'laravel-filemanager'); + $this->loadViewsFrom(__DIR__ . '/views', 'laravel-filemanager'); $this->publishes([ __DIR__ . '/config/lfm.php' => base_path('config/lfm.php'), ], 'lfm_config'); $this->publishes([ - __DIR__.'/../public' => public_path('vendor/laravel-filemanager'), + __DIR__ . '/../public' => public_path('vendor/laravel-filemanager'), ], 'lfm_public'); $this->publishes([ - __DIR__.'/views' => base_path('resources/views/vendor/laravel-filemanager'), + __DIR__ . '/views' => base_path('resources/views/vendor/laravel-filemanager'), ], 'lfm_view'); $this->publishes([ - __DIR__.'/Handlers/LfmConfigHandler.php' => base_path('app/Handlers/LfmConfigHandler.php'), + __DIR__ . '/Handlers/LfmConfigHandler.php' => base_path('app/Handlers/LfmConfigHandler.php'), ], 'lfm_handler'); if (config('lfm.use_package_routes')) { @@ -64,14 +64,14 @@ public function register() $this->app->singleton(ImageManagerInterface::class, function ($app) { $driver = config('lfm.intervention_driver'); - + $driverInstance = match ($driver) { 'gd' => new GdDriver(), 'imagick' => new ImagickDriver(), default => null, }; - if(is_null($driverInstance)) { + if (is_null($driverInstance)) { \Log::error("Unsupported image driver [$driver]. GdDriver will be used."); $driverInstance = new GdDriver(); } diff --git a/src/Services/ImageService.php b/src/Services/ImageService.php index f46163a2..9d5fe13a 100644 --- a/src/Services/ImageService.php +++ b/src/Services/ImageService.php @@ -25,5 +25,4 @@ public function __call(string $method, array $arguments) throw new \BadMethodCallException("Method {$method} does not exist on ImageService or ImageManagerInterface."); } - }