PHP code example of melsaka / laravel-image-manager

1. Go to this page and download the library: Download melsaka/laravel-image-manager library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

melsaka / laravel-image-manager example snippets


return [
    'storage_disk' => 'public', // could be r2, aws, etc..
    'base_path' => 'uploads',
    'format' => 'webp',
    'quality' => 90,
];



namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Melsaka\ImageManager\Traits\HasImages;

class User extends Model
{
    use HasImages;
    
    // Your model code...
}



namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Melsaka\ImageManager\Traits\HasImages;

class User extends Model
{
    use HasImages;
    
    protected $with = ['images'];
    // Your model code...
}


namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Melsaka\ImageManager\Traits\HasImages;

class Product extends Model
{
    use HasImages;
    
    // No configuration needed! 'default' type is ready to use
}

'default' => [
    'sizes' => [
        'small' => ['width' => 300, 'height' => 300, 'mode' => 'cover'],
        'medium' => ['width' => 600, 'height' => 400, 'mode' => 'cover'],
        'large' => ['width' => 1920, 'height' => 1080, 'mode' => 'cover'],
    ],
]

// Store a single image
$user = User::find(1);

$image = $user->storeImage($uploadedFile);

$image = $user->storeImage($uploadedFile, 'avatar');

// Store multiple images
$images = $user->storeImages($uploadedFiles, 'gallery');

// Store or update (replaces existing image of same type)
$image = $user->storeOrUpdateImage($uploadedFile, 'avatar');

// get array of all image urls 
$image->getUrls();

$avatars = $user->getImages();

// Get all images of a specific type
$avatars = $user->getImages('avatar');

// Get a single image
$avatar = $user->getImage('avatar');

// Get image URLs
$urls = $user->getImageUrls('avatar');
// Returns: ['name' => 'filename.webp', 'original' => 'url', 'small' => 'url', 'medium' => 'url']

// Get specific size URL
$thumbnailUrl = $user->getImageUrl('small', 'avatar');

// Auto-detects (convenient for single models)
$product->getImages('gallery');

// Explicit (forces fresh query even if loaded)
$product->getImages('gallery', false);

// Explicit (forces using loaded data, avoids N+1)
foreach ($products as $product) {
    $product->getImages('gallery', true); // Clear intention
}

// Delete single image by type
$user->deleteImage('avatar');

// Delete all images of a type
$user->deleteImagesOfType('gallery');

// Delete all images
$user->deleteAllImages();

// Replace all images of a type
$user->replaceImages($newFiles, 'gallery');

// Sync images (update existing, add new, remove extra)
$user->syncImages($files, 'gallery');

// Update image by ID
$user->updateImageById($uploadedFile, $imageId);

// Eager load all user images
User::with('images')->get();

// load user images
$user->load('images');

class ClientResource extends JsonResource
{
    public function toArray(Request $request): array
    {
        return [
            'id' => $this->id,
            'name' => $this->name,
            // more code ...
            'image' => $this->when($this->relationLoaded('images'), $this->getImageUrls()),
        ];
    }
}


namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Melsaka\ImageManager\Traits\HasImages;

class Product extends Model
{
    use HasImages;
    
    /**
     * Define supported image types and their sizes.
     */
    public static function supportedImages(): array
    {
        return [
            // Customize the 'default' type
            'default' => [
                'sizes' => [
                    'small' => [
                        'width' => 200,
                        'height' => 200,
                        'mode' => 'cover',
                    ],
                    'large' => [
                        'width' => 1200,
                        'height' => 800,
                        'mode' => 'scale',
                    ],
                ],
            ],
            // Add additional types
            'thumbnail' => [
                'sizes' => [
                    'small' => [
                        'width' => 150,
                        'height' => 150,
                        'mode' => 'cover',
                    ],
                    'medium' => [
                        'width' => 300,
                        'height' => 300,
                        'mode' => 'cover',
                    ],
                ],
            ],
            'gallery' => [
                'sizes' => [
                    'thumbnail' => [
                        'width' => 200,
                        'height' => 200,
                        'mode' => 'cover',
                    ],
                    'large' => [
                        'width' => 1200,
                        'height' => 800,
                        'mode' => 'scale',
                    ],
                ],
            ],
            'banner' => [
                'sizes' => [
                    'desktop' => [
                        'width' => 1920,
                        'height' => 400,
                        'mode' => 'cover',
                    ],
                    'mobile' => [
                        'width' => 768,
                        'height' => 300,
                        'mode' => 'cover',
                    ],
                ],
            ],
        ];
    }
}

'medium' => [
    'width' => 600,
    'height' => 400,
    'mode' => 'pad',
    'background' => 'ffffff', // White background (hex without #)
],
bash
php artisan vendor:publish --tag=image-manager-config
bash
php artisan vendor:publish --tag=image-manager-migrations
bash
php artisan migrate
bash
php artisan storage:link