Resize Images in Laravel with Spatie Media Library

Really popular Laravel Media Library package has one less-known feature – image resizing. The best part is that it’s really simple to add, let me show you how.

If you prefer video version, here it is below:


And now – text version of the tutorial.

If you need to save resized image version while uploading the file, like generate a thumbnail for the photo, all you need to do is add this method registerMediaConversions() to your Model:

use Illuminate\Database\Eloquent\Model;
use Spatie\MediaLibrary\Models\Media;
use Spatie\MediaLibrary\HasMedia\HasMedia;
use Spatie\MediaLibrary\HasMedia\HasMediaTrait;

class NewsItem extends Model implements HasMedia
{
    use HasMediaTrait;

    public function registerMediaConversions(Media $media = null)
    {
        $this->addMediaConversion('thumb')
              ->width(150)
              ->height(100);
    }
}

Also, don’t forget to add use Spatie\MediaLibrary\Models\Media; to the top.

This method will generate a resized thumbnail with maximum 150px width and maximum 100px height (resized proportionally) and put it in storage/app/public/[media_id]/conversions folder:

In database media table, it will be saved with custom_properties of registered media name(s).

And then you will be able to access that specific conversion by the same name you used here:

So, if your Media Collection name is named cover, you can view the thumbnail image like this:

<img src="{{ $book->getFirstMediaUrl('cover', 'thumb') }}" />

You can also register multiple conversions for the same model, just add more rules to the method:

public function registerMediaConversions(Media $media = null)
{
    $this->addMediaConversion('thumb')
        ->width(150)
        ->height(100);
    $this->addMediaConversion('bigthumb')
        ->width(300)
        ->height(100);
}
Like our articles?
Check out our Laravel online courses!

5 COMMENTS

    • They have different purpose. Intervention is just for manipulating images, and spatie media library is for storing any files, not only images.

  1. How to optimize the original image? The one which is stored outside the conversions folder.
    Actually there are lots of media is on our website. Every image is being converted in different sizes and we use them as required. The problem is our clients uploading too large images. and it is consuming too much space.
    So we want an optimized original image. I hope you got my point.

    Please help!
    Thanx

LEAVE A REPLY

Please enter your comment!
Please enter your name here