Defining conversions | laravel-medialibrary | Spatie

 SPATIE

  Laravel Media Library
========================

spatie.be/open-source

  [Docs](https://spatie.be/docs)  [Laravel-medialibrary](https://spatie.be/docs/laravel-medialibrary/v3)  Converting-images  Defining conversions

 Version   v11   v10   v9   v8   v7   v6   v5   v4   v3

 Other versions for crawler [v11](https://spatie.be/docs/laravel-medialibrary/v11) [v10](https://spatie.be/docs/laravel-medialibrary/v10) [v9](https://spatie.be/docs/laravel-medialibrary/v9) [v8](https://spatie.be/docs/laravel-medialibrary/v8) [v7](https://spatie.be/docs/laravel-medialibrary/v7) [v6](https://spatie.be/docs/laravel-medialibrary/v6) [v5](https://spatie.be/docs/laravel-medialibrary/v5) [v4](https://spatie.be/docs/laravel-medialibrary/v4) [v3](https://spatie.be/docs/laravel-medialibrary/v3)

- [ Introduction ](https://spatie.be/docs/laravel-medialibrary/v3/introduction)
- [ Postcardware ](https://spatie.be/docs/laravel-medialibrary/v3/postcardware)
- [ Requirements ](https://spatie.be/docs/laravel-medialibrary/v3/requirements)
- [ Installation &amp; setup ](https://spatie.be/docs/laravel-medialibrary/v3/installation-setup)
- [ Questions and issues ](https://spatie.be/docs/laravel-medialibrary/v3/questions-issues)
- [ Changelog ](https://spatie.be/docs/laravel-medialibrary/v3/changelog)

Basic usage
-----------

- [ Preparing your model ](https://spatie.be/docs/laravel-medialibrary/v3/basic-usage/preparing-your-model)
- [ Associating files ](https://spatie.be/docs/laravel-medialibrary/v3/basic-usage/associating-files)
- [ Retrieving media ](https://spatie.be/docs/laravel-medialibrary/v3/basic-usage/retrieving-media)
- [ Working with collections ](https://spatie.be/docs/laravel-medialibrary/v3/basic-usage/working-with-collections)

Converting images
-----------------

- [ Defining conversions ](https://spatie.be/docs/laravel-medialibrary/v3/converting-images/defining-conversions)
- [ Retrieving converted images ](https://spatie.be/docs/laravel-medialibrary/v3/converting-images/retrieving-converted-images)
- [ Regenerating images ](https://spatie.be/docs/laravel-medialibrary/v3/converting-images/regenerating-images)

Advanced usage
--------------

- [ Working with multiple filesystems ](https://spatie.be/docs/laravel-medialibrary/v3/advanced-usage/working-with-multiple-filesystems)
- [ Storing media specific manipulations ](https://spatie.be/docs/laravel-medialibrary/v3/advanced-usage/storing-media-specific-manipulations)
- [ Using your own model ](https://spatie.be/docs/laravel-medialibrary/v3/advanced-usage/using-your-own-model)
- [ Using a custom directory structure ](https://spatie.be/docs/laravel-medialibrary/v3/advanced-usage/using-a-custom-directory-structure)
- [ Consuming events ](https://spatie.be/docs/laravel-medialibrary/v3/advanced-usage/consuming-events)
- [ Generating custom urls ](https://spatie.be/docs/laravel-medialibrary/v3/advanced-usage/generating-custom-urls)
- [ Adding custom properties ](https://spatie.be/docs/laravel-medialibrary/v3/advanced-usage/adding-custom-properties)

API
---

- [ Adding files ](https://spatie.be/docs/laravel-medialibrary/v3/api/adding-files)
- [ Defining conversions ](https://spatie.be/docs/laravel-medialibrary/v3/api/defining-conversions)

      You are viewing the documentation for **an older version** of this package. You can check the version you are using with the following command:

 `                                    composer show spatie/laravel-medialibrary                                                                                                                                                                                                                                    `

Defining conversions
====================

###  On this page

1. [ Examples ](#content-examples)
2. [ Convenience Methods ](#content-convenience-methods)

Imagine making a site with a list of all news items. Wouldn't it be nice to show the user a thumbnail of the image associated with the news item? When adding an image to a media collection, these derived images can be created automatically.

If you want to use this functionality your models should implement the `HasMediaConversions` interface instead of `HasMedia`. This interface expects an implementation of the `registerMediaConversions` method:

```
use Illuminate\Database\Eloquent\Model;
use Spatie\MediaLibrary\HasMedia\Interfaces\HasMediaConversions;
use Spatie\MediaLibrary\HasMedia\HasMediaTrait;

class NewsItem extends Model implements HasMediaConversions
{
    use HasMediaTrait;

    public function registerMediaConversions()
    {
        $this->addMediaConversion('thumb')
             ->setManipulations(['w' => 368, 'h' => 232])
             ->performOnCollections('images');
    }
}
```

When associating a jpg-, png-, or pdf-file, the package will—besides storing the original image—create a derived image for every media conversion that was added. By default, the output will be saved as a jpg-file.

Internally, [Glide](http://glide.thephpleague.com/) is used to manipulate the images. You can use any parameter from their image API. So if you want to output to another image format you can specify png or gif using the `fm`-key in an image profile.

By default, a conversion will be added to the queue that you've specified in the configuration. You can avoid the usage of the queue by calling `nonQueued` on a conversion.

You can add as many conversions on a model as you'd like. Conversions can also be performed on all collections by dropping the `performOnCollections`-call, or passing "\*" as the collections parameter.

Examples
--------------------------------------------------------------------------------

```
// In your NewsItem model

public function registerMediaConversions()
{
    // Perform a resize and filter on images from the 'images' and 'anotherCollection' collections
    // and save them as png files.
    $this->addMediaConversion('thumb')
         ->setManipulations(['w' => 368, 'h' => 232, 'filt' => 'greyscale', 'fm' => 'png'])
         ->performOnCollections('images', 'anotherCollection')
         ->nonQueued();

    // Perform a resize and sharpen on every collection
    $this->addMediaConversion('adminThumb')
         ->setManipulations(['w' => 50, 'h' => 50, 'sharp'=> 15])
         ->performOnCollections('*');

    // Perform a resize on every collection
    $this->addMediaConversion('big')
         ->setManipulations(['w' => 500, 'h' => 500]);
}
```

Convenience Methods
-----------------------------------------------------------------------------------------------------------------

Instead of specifying the glide parameters in the `setManipulations` method, you can also you use the built-in convenience methods.

This media conversion:

```
$this->addMediaConversion('thumb')
     ->setManipulations(['w' => 500]);
```

is equivalent to:

```
$this->addMediaConversion('thumb')
     ->setWidth(500);
```

For a list of all the convenience methods, visit the [Defining Conversions page in the API docs](/laravel-medialibrary/v3/api/defining-conversions/).
