PHPackages                             think.studio/laravel-simple-image-manager - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Image &amp; Media](/categories/media)
4. /
5. think.studio/laravel-simple-image-manager

ActiveLibrary[Image &amp; Media](/categories/media)

think.studio/laravel-simple-image-manager
=========================================

Simple package to save multiple images formats when upload an image.

3.4.0(2y ago)31184MITPHPPHP ^8.1

Since Jul 17Pushed 2y ago1 watchersCompare

[ Source](https://github.com/dev-think-one/laravel-simple-image-manager)[ Packagist](https://packagist.org/packages/think.studio/laravel-simple-image-manager)[ Docs](https://github.com/dev-think-one/laravel-simple-image-manager)[ RSS](/packages/thinkstudio-laravel-simple-image-manager/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (7)Versions (17)Used By (4)

Laravel: Simple image manager
=============================

[](#laravel-simple-image-manager)

[![Packagist License](https://camo.githubusercontent.com/89bdea295a7d82286d7a02f4706122b1d025a737946514a748b351a56296cf7a/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f7468696e6b2e73747564696f2f6c61726176656c2d73696d706c652d696d6167652d6d616e616765723f636f6c6f723d253233346463373166)](https://camo.githubusercontent.com/89bdea295a7d82286d7a02f4706122b1d025a737946514a748b351a56296cf7a/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f7468696e6b2e73747564696f2f6c61726176656c2d73696d706c652d696d6167652d6d616e616765723f636f6c6f723d253233346463373166)[![Packagist Version](https://camo.githubusercontent.com/9e0b38691c5655df118b00fed04714964580e19e829f96a1ced509522fba97dc/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f7468696e6b2e73747564696f2f6c61726176656c2d73696d706c652d696d6167652d6d616e61676572)](https://packagist.org/packages/think.studio/laravel-simple-image-manager)[![Total Downloads](https://camo.githubusercontent.com/7b2e1af595818df450067fa1aebe5de53aab1bd90fa1c132fc58d7202fa493cd/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f7468696e6b2e73747564696f2f6c61726176656c2d73696d706c652d696d6167652d6d616e61676572)](https://packagist.org/packages/think.studio/laravel-simple-image-manager)[![Build Status](https://camo.githubusercontent.com/794b9d72de8d25d6b0fd805b8d7180950627a7b1148734df82ec6cbccee27cc3/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f6465762d7468696e6b2d6f6e652f6c61726176656c2d73696d706c652d696d6167652d6d616e616765722f6261646765732f6275696c642e706e673f623d6d61696e)](https://scrutinizer-ci.com/g/dev-think-one/laravel-simple-image-manager/build-status/main)[![Code Coverage](https://camo.githubusercontent.com/1215bcc9bd79662706056ef8530b8195a7b66db35a453ff23016d932075e6279/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f6465762d7468696e6b2d6f6e652f6c61726176656c2d73696d706c652d696d6167652d6d616e616765722f6261646765732f636f7665726167652e706e673f623d6d61696e)](https://scrutinizer-ci.com/g/dev-think-one/laravel-simple-image-manager/?branch=main)[![Scrutinizer Code Quality](https://camo.githubusercontent.com/5de71507e22132f6deece0e8749067f3c5b8aff4da78865d8dc2d6c5247401d8/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f6465762d7468696e6b2d6f6e652f6c61726176656c2d73696d706c652d696d6167652d6d616e616765722f6261646765732f7175616c6974792d73636f72652e706e673f623d6d61696e)](https://scrutinizer-ci.com/g/dev-think-one/laravel-simple-image-manager/?branch=main)

Simple package to save multiple images formats when upload an image. For example:

- myimage.png (original)
- myimage-small.png
- myimage-thumb.png
- myimage-100x100.png

Package works as wrapper of [spatie/image](https://spatie.be/docs/image) package. So when you create formats you can use all methods of this package. All configuration options description you can find in [config file](config/simple-image-manager.php)

Installation
------------

[](#installation)

Install the package via composer:

```
composer require think.studio/laravel-simple-image-manager
```

You can publish the config file with:

```
php artisan vendor:publish --provider="SimpleImageManager\ServiceProvider" --tag="config"
```

Usage
-----

[](#usage)

Upload file example:

```
if ($request->hasFile('avatar')) {
    $user->avatar = SimpleImageManager::driver('avatars')
                                      ->upload(
                                          $request->file('avatar'),
                                          null /* or some name */,
                                          $user->avatar /* old file name to replace it */
                                       );
}
$user->save();
```

Other methods:

```
// Get file url
$url = SimpleImageManager::driver('avatars')->url((string) $user->avatar, $format);
// Get file path
$path = SimpleImageManager::driver('avatars')->path((string) $user->avatar, $format);
// Delete specific format
$isDeleted = SimpleImageManager::driver('avatars')->deleteSingle((string) $user->avatar, $format);
// Delete all files
if($isDeletedAll = SimpleImageManager::driver('avatars')->delete((string) $user->avatar)) {
    $user->avatar = null;
}
```

### Advanced usage

[](#advanced-usage)

#### Create specific trait

[](#create-specific-trait)

1. Create trait

```
// app/Models/Traits/HasAvatar.php
namespace App\Models\Traits;

use Illuminate\Http\UploadedFile;
use SimpleImageManager\Facades\SimpleImageManager;

trait HasAvatar {

    /**
     * Driver name.
     *
     * @return string|null
     */
    public function avatarManagerDriver(): ?string {
        if ( property_exists( $this, 'avatarManagerDriver' ) ) {
            return $this->avatarManagerDriver;
        }

        return null;
    }

    /**
     * Field key name.
     *
     * @return string
     */
    public function avatarKey(): string {
        if ( property_exists( $this, 'avatarKey' ) ) {
            return $this->avatarKey;
        }

        return 'avatar';
    }

    /**
     * Image manager.
     *
     * @return \SimpleImageManager\Contracts\ImageManagerInterface
     */
    public function avatarManager(): \SimpleImageManager\Contracts\ImageManagerInterface {
        return SimpleImageManager::driver( $this->avatarManagerDriver() );
    }

    /**
     * Upload file to storage.
     *
     * @param UploadedFile $image
     * @param string|null $filename
     *
     * @return string|null Storage file name.
     */
    public function avatarUpload( UploadedFile $image, ?string $filename = null ): ?string {
        return $this->avatarManager()
                    ->upload( $image, $filename, $this->{$this->avatarKey()} );
    }

    /**
     * Delete file from storage.
     *
     * @return bool Storage file name.
     */
    public function avatarDelete( bool $updateField = true, bool $persist = false ): bool {
        $result = $this->avatarManager()->delete( $this->{$this->avatarKey()} );
        if ( $result && $updateField ) {
            $this->{$this->avatarKey()} = null;
            if ( $persist ) {
                $this->save();
            }
        }

        return $result;
    }

    /**
     * Full path to file.
     *
     * @param string|null $format
     *
     * @return string|null
     */
    public function avatarPath( ?string $format = null ): ?string {
        return $this->avatarManager()->path( (string) $this->{$this->avatarKey()}, $format );
    }

    /**
     * File url.
     *
     * @param string|null $format
     *
     * @return string|null
     */
    public function avatarUrl( ?string $format = null ): ?string {
        return $this->avatarManager()->url( (string) $this->{$this->avatarKey()}, $format );
    }
}
```

2. Use trail

```
class User //...
{
    //...
    use HasAvatar;
    // ...

    protected string $avatarManagerDriver = 'avatars';
}
```

3. Manipulate using trait

```
if ($request->hasFile('avatar')) {
    $user->avatar = $user->avatarUpload(
        $request->file('avatar'),
        null /* or some name */
    );
}
$user->save();

$url = $user->avatarUrl();
```

#### Use internal trait

[](#use-internal-trait)

```
use Illuminate\Database\Eloquent\Model;
use \SimpleImageManager\Eloquent\HasThinkImage;
use \SimpleImageManager\Eloquent\ThinkImage;

class Author extends Model
{
    use HasThinkImage;

    /** @inerhitDoc  */
    public function thinkImagesMap(): array {
        return [
            'avatar' => (new ThinkImage('avatars', $this->avatar))
                ->setDefaultUrl(url('/img/default.svg')),
            'image' => 'feature-images',
        ];
    }

    public function avatarImage(): ThinkImage {
        return $this->thinkImage('avatar');
    }

    public function featureImage(): ThinkImage {
        return $this->thinkImage('image');
    }
}
```

Then you can use it:

```
/** @var Author Author */
$author->featureImage()->img();
$author->avatarImage()->url();
$author->thinkImage('avatar')->path();
```

#### Usage with laravel-nova

[](#usage-with-laravel-nova)

```
Avatar::make('Avatar', 'avatar')
    ->store(
      fn ($request, Model $model, $attribute, $requestAttribute, $storageDisk, $storageDir) => fn () => $model->fill([
          $attribute => $model->avatarUpload($request->file($requestAttribute), $model->uuid),
      ])->save()
    )->maxWidth(100)
    ->preview(fn ($value, $storageDisk, $model) => $model->avatarUrl('small'))
    ->thumbnail(fn ($value, $storageDisk, $model) => $model->avatarUrl('small'))
    ->delete(fn ($request, $model, $storageDisk, $storagePath) => $model->avatarDelete()),
```

Credits
-------

[](#credits)

- [![Think Studio](https://camo.githubusercontent.com/8e541bece07d503c85a126b5294865faa00e27371048772f566a0cce8c01fd3a/68747470733a2f2f7961726f736c617777772e6769746875622e696f2f696d616765732f73706f6e736f72732f7061636b616765732f6c6f676f2d7468696e6b2d73747564696f2e706e67)](https://think.studio/)

###  Health Score

31

—

LowBetter than 68% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity13

Limited adoption so far

Community13

Small or concentrated contributor base

Maturity68

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~48 days

Recently: every ~34 days

Total

16

Last Release

1029d ago

Major Versions

1.1.0 → 2.0.02021-10-13

2.2.0 → 3.0.02022-04-07

PHP version history (4 changes)1.0.0PHP &gt;=7.4

2.0.0PHP &gt;=8.0

3.0.0PHP ^8.0

3.1.0PHP ^8.1

### Community

Maintainers

![](https://www.gravatar.com/avatar/53f93fa87d58f33d106de6bd5e2946f8a345ebfaee146360746056cb134a15a0?d=identicon)[think.studio](/maintainers/think.studio)

---

Top Contributors

[![yaroslawww](https://avatars.githubusercontent.com/u/23663794?v=4)](https://github.com/yaroslawww "yaroslawww (36 commits)")

---

Tags

laravelimage

###  Code Quality

TestsPHPUnit

Static AnalysisPsalm

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/thinkstudio-laravel-simple-image-manager/health.svg)

```
[![Health](https://phpackages.com/badges/thinkstudio-laravel-simple-image-manager/health.svg)](https://phpackages.com/packages/thinkstudio-laravel-simple-image-manager)
```

###  Alternatives

[intervention/image-laravel

Laravel Integration of Intervention Image

1496.5M100](/packages/intervention-image-laravel)[bkwld/croppa

Image thumbnail creation through specially formatted URLs for Laravel

510496.0k22](/packages/bkwld-croppa)[spescina/imgproxy

An image proxy for Laravel

201.3k](/packages/spescina-imgproxy)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
