Auto Image & file upload, resize and crop for Laravel eloquent model using Intervention image

Overview

Laravel ImageUp

Latest Version on Packagist Software License Build Status Total Downloads

The qcod/laravel-imageup is a trait which gives you auto upload, resize and crop for image feature with tons of customization.

Installation

You can install the package via composer:

$ composer require qcod/laravel-imageup

The package will automatically register itself. In case you need to manually register it you can by adding it in config/app.php providers array:

QCod\ImageUp\ImageUpServiceProvider::class

You can optionally publish the config file with:

php artisan vendor:publish --provider="QCod\ImageUp\ImageUpServiceProvider" --tag="config"

It will create config/imageup.php with all the settings.

Getting Started

To use this trait you just need to add use HasImageUploads on the Eloquent model and define all the fields which needs to store the images in database.

Model

<?php
namespace App;

use QCod\ImageUp\HasImageUploads;
use Illuminate\Database\Eloquent\Model;

class User extends Model {
    use HasImageUploads;
    
    // assuming `users` table has 'cover', 'avatar' columns
    // mark all the columns as image fields 
    protected static $imageFields = [
        'cover', 'avatar'
    ];
}

Once you marked all the image fields in model it will auto upload the image whenever you save the model by hooking in Model::saved() event. It will also update the database with new stored file path and if finds old image it will be deleted once new image is uploaded.

Image field should be as as VARCHAR in database table to store the path of uploaded image.

In Controller

<?php
namespace App;
use App\Http\Controllers\Controller;

class UserController extends Controller {
    public function store(Request $request){
        return User::create($request->all());
    }
}

Make sure to run php artisan storage:link to see the images from public storage disk

That's it, with above setup when ever you hit store method with post request and if cover or avatar named file is present on request() it will be auto uploaded.

Upload Field options

ImageUp gives you tons of customization on how the upload and resize will be handled from defined field options, following are the things you can customize:

<?php
namespace App;

use QCod\ImageUp\HasImageUploads;
use Illuminate\Database\Eloquent\Model;

class User extends Model {
    
    use HasImageUploads;
    
    // which disk to use for upload, can be override by field options 
    protected $imagesUploadDisk = 'local';
    
    // path in disk to use for upload, can be override by field options 
    protected $imagesUploadPath = 'uploads';
    
    // auto upload allowed 
    protected $autoUploadImages = true;
    
    // all the images fields for model
    protected static $imageFields = [
        'avatar' => [
            // width to resize image after upload
            'width' => 200,
            
            // height to resize image after upload
            'height' => 100,
            
            // set true to crop image with the given width/height and you can also pass arr [x,y] coordinate for crop.
            'crop' => true,
            
            // what disk you want to upload, default config('imageup.upload_disk')
            'disk' => 'public',
            
            // a folder path on the above disk, default config('imageup.upload_directory')
            'path' => 'avatars',
            
            // placeholder image if image field is empty
            'placeholder' => '/images/avatar-placeholder.svg',
            
            // validation rules when uploading image
            'rules' => 'image|max:2000',
            
            // override global auto upload setting coming from config('imageup.auto_upload_images')
            'auto_upload' => false,
            
            // if request file is don't have same name, default will be the field name
            'file_input' => 'photo',
            
            // a hook that is triggered before the image is saved
            'before_save' => BlurFilter::class,
            
            // a hook that is triggered after the image is saved
            'after_save' => CreateWatermarkImage::class
        ],
        'cover' => [
            //...    
        ]
    ];
    
    // any other than image file type for upload
    protected static $fileFields = [
            'resume' => [
                // what disk you want to upload, default config('imageup.upload_disk')
                'disk' => 'public',
                
                // a folder path on the above disk, default config('imageup.upload_directory')
                'path' => 'docs',
                
                // validation rules when uploading file
                'rules' => 'mimes:doc,pdf,docx|max:1000',
                
                // override global auto upload setting coming from config('imageup.auto_upload_images')
                'auto_upload' => false,
                
                // if request file is don't have same name, default will be the field name
                'file_input' => 'cv',
                
                // a hook that is triggered before the file is saved
                'before_save' => HookForBeforeSave::class,
                
                // a hook that is triggered after the file is saved
                'after_save' => HookForAfterSave::class
            ],
            'cover_letter' => [
                //...    
            ]
        ];
}

Customize filename

In some case you will need to customize the saved filename. By default it will be $file->hashName() generated hash.

You can do it by adding a method on the model with {fieldName}UploadFilePath naming convention:

class User extends Model {
    use HasImageUploads;
    
    // assuming `users` table has 'cover', 'avatar' columns
    // mark all the columns as image fields 
    protected static $imageFields = [
        'cover', 'avatar'
    ];
    
    // override cover file name
    protected function coverUploadFilePath($file) {
        return $this->id . '-cover-image.jpg';
    }
}

Above will always save uploaded cover image as uploads/1-cover-image.jpg.

Make sure to return only relative path from override method.

Request file will be passed as $file param in this method, so you can get the extension or original file name etc to build the filename.

    // override cover file name
    protected function coverUploadFilePath($file) {
        return $this->id .'-'. $file->getClientOriginalName();
    }
    
    /** Some of methods on file */
    // $file->getClientOriginalExtension()
    // $file->getRealPath()
    // $file->getSize()
    // $file->getMimeType()

Available methods

You are not limited to use auto upload image feature only. This trait will give you following methods which you can use to manually upload and resize image.

Note: Make sure you have disabled auto upload by setting protected $autoUploadImages = false; on model or dynamiclly by calling $model->disableAutoUpload(). You can also disable it for specifig field by calling $model->setImagesField(['cover' => ['auto_upload' => false]); otherwise you will be not seeing your manual uploads, since it will be overwritten by auto upload upon model save.

$model->uploadImage($imageFile, $field = null) / $model->uploadFile($docFile, $field = null)

Upload image/file for given $field, if $field is null it will upload to first image/file option defined in array.

$user = User::findOrFail($id);
$user->uploadImage(request()->file('cover'), 'cover');
$user->uploadFile(request()->file('resume'), 'resume');

$model->setImagesField($fieldsOptions) / $model->setFilesField($fieldsOptions)

You can also set the image/file fields dynamically by calling $model->setImagesField($fieldsOptions) / $model->setFilesField($fieldsOptions) with field options, it will replace fields defined on model property.

$user = User::findOrFail($id);

$fieldOptions = [
    'cover' => [ 'width' => 1000 ],
    'avatar' => [ 'width' => 120, 'crop' => true ],    
];

// override image fields defined on  model 
$user->setImagesField($fieldOptions);

$fileFieldOption = [
    'resume' => ['path' => 'resumes']
];

// override file fields defined on  model
$user->setFilesField($fileFieldOption);

$model->hasImageField($field) / $model->hasFileField($field)

To check if field is defined as image/file field.

$model->deleteImage($filePath) / $model->deleteFile($filePath)

Delete any image/file if it exists.

$model->resizeImage($imageFile, $fieldOptions)

If you have image already you can call this method to resize it with the same options we have used for image fields.

$user = User::findOrFail($id);

// resize image, it will give you resized image, you need to save it  
$imageFile = '/images/some-big-image.jpg';
$image = $user->resizeImage($imageFile, [ 'width' => 120, 'crop' => true ]);

// or you can use uploaded file
$imageFile = request()->file('avatar');
$image = $user->resizeImage($imageFile, [ 'width' => 120, 'crop' => true ]);

$model->cropTo($x, $y)->resizeImage($imageFile, $field = null)

You can use this cropTo() method to set the x and y coordinates of cropping. It will be very useful if you are getting coordinate from some sort of font-end image cropping library.

$user = User::findOrFail($id);

// uploaded file from request
$imageFile = request()->file('avatar');

// coordinates from request
$coords = request()->only(['crop_x', 'crop_y']);

// resizing will give you intervention image back
$image = $user->cropTo($coords)
    ->resizeImage($imageFile, [ 'width' => 120, 'crop' => true ]);

// or you can do upload and resize like this, it will override field options crop setting
$user->cropTo($coords)
    ->uploadImage(request()->file('cover'), 'avatar');

$model->imageUrl($field) / $model->fileUrl($field)

Gives uploaded file url for given image/file field.

$user = User::findOrFail($id);

// in your view 
<img src="{{ $user->imageUrl('cover') }}" alt="" />
// http://www.example.com/storage/uploads/iGqUEbCPTv7EuqkndE34CNitlJbFhuxEWmgN9JIh.jpeg

$model->imageTag($field, $attribute = '')

It gives you <img /> tag for a field.

{!! $model->imageTag('avatar') !!}
<!-- <img src="http://www.example.com/storage/uploads/iGqUEbCPTv7EuqkndE34CNitlJbFhuxEWmgN9JIh.jpeg" /> -->

{!! $model->imageTag('avatar', 'class="float-left mr-3"') !!}
<!-- <img src="http://www.example.com/storage/uploads/iGqUEbCPTv7EuqkndE34CNitlJbFhuxEWmgN9JIh.jpeg" class="float-left mr-3 /> -->

Hooks

Hooks allow you to apply different type of customizations or any other logic that you want to take place before or after the image is saved.

Definition types

You can define hooks by specifying a class name

protected static $imageFields = [
    'avatar' => [
        'before_save' => BlurFilter::class,
    ],
    'cover' => [
        //...    
    ]
];

The hook class must have a method named handle that will be called when the hook is triggered. An instance of the intervention image will be passed to the handle method.

class BlurFilter {
    public function handle($image) {
        $image->blur(10);
    }
}

The class based hooks are resolved through laravel ioc container, which allows you to inject any dependencies through the constructor.

Keep in mind you will be getting resized image in before and after save hook handler if you have defined field option with width or height. Sure you can get original image from request()->file('avatar') any time you want.

The second type off hook definition is callback hooks.

$user->setImagesField([
    'avatar' => [
        'before_save' => function($image) {
            $image->blur(10);
        },
    ],
    'cover' => [
        //...    
    ]
]);

The callback will receive the intervention image instance argument as well.

Hook types

There are two types of hooks a before_save and after_save hooks.

The before_save hook is called just before the image is saved to the disk. Any changes made to the intervention image instance within the hook will be applied to the output image.

$user->setImagesField([
    'avatar' => [
        'width' => 100,
        'height' => 100,
        'before_save' => function($image) {
            // The image will be 50 * 50, this will override the 100 * 100 
            $image->resize(50, 50);
        },
    ]
]);

The after_save hook is called right after the image was saved to the disk.

$user->setImagesField([
    'logo' => [
        'after_save' => function($image) {
            // Create a watermark image and save it
        },
    ]
]);

Config file

<?php

return [

    /**
     * Default upload storage disk
     */
    'upload_disk' => 'public',

    /**
     * Default Image upload directory on the disc
     * eg. 'uploads' or 'user/avatar'
     */
    'upload_directory' => 'uploads',

    /**
     * Auto upload images from incoming Request if same named field or
     * file_input field on option present upon model update and create.
     * can be override in individual field options
     */
    'auto_upload_images' => true,

    /**
     * It will auto delete images once record is deleted from database
     */
    'auto_delete_images' => true,

    /**
     * Set an image quality
     */
    'resize_image_quality' => 80
];

Changelog

Please see CHANGELOG for more information on what has changed recently.

Testing

The package contains some integration/smoke tests, set up with Orchestra. The tests can be run via phpunit.

$ composer test

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email [email protected] instead of using the issue tracker.

Credits

About QCode.in

QCode.in (https://www.qcode.in) is blog by Saqueib which covers All about Full Stack Web Development.

License

The MIT License (MIT). Please see License File for more information.

Comments
  • Image dont't upload

    Image dont't upload

    Hello, I try laravel-imageup in local with phpstorm and .laragon Everything ok but images never upload anywhere. Actually i'm with basic configuration so with imageup.php =

    /**
     * Default upload storage disk
     */
    'upload_disk' => 'public',
    
    
    /**
     * Default Image upload directory on the disc
     * eg. 'uploads' or 'user/avatar'
     */
    'upload_directory' => 'avatars',
    
    /**
     * Auto upload images from incoming Request if same named field or
     * file_input field on option present upon model update and create.
     * can be override in individual field options
     */
    'auto_upload_images' => true,
    
    /**
     * It will auto delete images once record is deleted from database
     */
    'auto_delete_images' => true,
    
    /**
     * Set an image quality
     */
    'resize_image_quality' => 80
    

    ]; ` I use avatars directory for avatars in profil so i'm sur permission on it is ok. URL of image is saved correctly in DB and i have no error message anywhere (log, debugbar...). DO you have idea of why i can't upload ?

    opened by grandgite 12
  • Replace old image

    Replace old image

    Great package ! Curently if I upload an image for my client logo, it saves to S3 like a charm. But, if my client update his logo, it works but it doesn't delete the old one in the folder. Any improvements for this ?

    bug 
    opened by quaidesbalises 12
  • Feature Request: Option to upload non-image documents too

    Feature Request: Option to upload non-image documents too

    Thanks for nice library!

    I saw right now it only works for image files:

    protected static $imageFields = [
            'cover', 'avatar'
    ];
    

    Would be great if support of other file types (pdf, doc, xls, csv, etc) is also added something like:

    protected static $fileFields = [
            'pdf_file', 'my_pdf_file'
    ];
    

    Thanks

    enhancement 
    opened by sarfraznawaz2005 7
  • Cannot access uploaded image

    Cannot access uploaded image

    First off, thanks for the amazing package. I have setup the package however, i am unable to get the image to show as i see only a broken image icon. On my network tab i see that the status code is 404 meaning not found. Please any help.

    I changed the APP URL to to see if it was the problem but still the issue remains the same.

    opened by Ralphkay 6
  • Add parameter and return types

    Add parameter and return types

    I've added parameter and return types to all the methods.

    NOTE: I think there's a bug in the imageUrl() method when it's calling getFileUploadPath($field) but I've not been able to fix it.

    Resolves #52 Resolves #57 Resolves #58

    opened by pacoorozco 5
  • Please add Laravel 7 support!

    Please add Laravel 7 support!

    Thanks for the simple and convenient package, please add support for Laravel 7. When installing, I get this:

    Problem 1 - Conclusion: remove laravel/framework v7.2.1 - Conclusion: don't install laravel/framework v7.2.1

    Thanks!

    opened by vetus-koneco 5
  • ERROR

    ERROR "detail": "League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/syofyan/dreamworld/project/pmo-9/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 159",

    "detail": "League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/syofyan/dreamworld/project/pmo-9/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 159",

    Its error on this line:

        private function deleteUploadedFile($filePath)
        {
            if ($this->getStorageDisk()->exists($filePath)) {
                $this->getStorageDisk()->delete($filePath);
            }
        }
    

    to this line:

            // delete old file
            if ($currentFile != $filePath) {
                $this->deleteImage($currentFile);
            }
    
    opened by syofyanzuhad 4
  • Feature Request: Easy way to make the package work with intervention cache

    Feature Request: Easy way to make the package work with intervention cache

    Trying out this package and quite like so far!

    However we almost always uses Intervention cache package with the Intervention image package to have easy access to multiple image sizes via the url caching / templating.

    Would be wonderful if this package had an easy way to make use of the caching package.

    I guess it would be able to be installed manually and just using the database column data to seup the custom URLs for the images in need. But would be nice if methods like $model->imageTag() had the support.

    Thanks.

    enhancement 
    opened by rawzone 4
  • Auto Upload - How to set the image upload path dynamically?

    Auto Upload - How to set the image upload path dynamically?

    Hi @saqueib

    I have not found a way to dynamically configure the upload path of the image.

    For example: 'avatars /'.$model->id.'/my-beautiful-picture.jpg'

    I also did not figure out how to rename the uploaded image.

    opened by joaorobertopb 4
  • Laravel 9.x Compatibility

    Laravel 9.x Compatibility

    This is an automated pull request from Shift to update your package code and dependencies to be compatible with Laravel 9.x.

    Before merging, you need to:

    • Checkout the l9-compatibility branch
    • Review all comments for additional changes
    • Thoroughly test your package

    If you do find an issue, please report it by commenting on this PR to help improve future automation.

    opened by laravel-shift 3
  • 404, page not found.

    404, page not found.

    Hello, well, everything goes as planned.

    Followed the docs, images are getting uploaded, but... at the time when I upload the image, it does get stored in the /uploads folder. The thing is that I've already linked the storage and something is making the app display a 404 (don't know really why).

    The name of the image matches the one stored in the DB (uploads/nU04FknEVfLtk73ZoZcOK7KEktSFCuLAOxhnQHiP.jpeg)

    the one saved is nU04FknEVfLtk73ZoZcOK7KEktSFCuLAOxhnQHiP.jpeg (inside the uploads folder). Any idea on this?

    opened by ghost 3
  • return placeholder image if file not exists on storage

    return placeholder image if file not exists on storage

    sometimes the file is deleted or upload image failed and it will broken link when get image url when file is not exists. i added condition to check if file is exists and return placeholder image if file is missing instead broken image url.

    opened by uthadehikaru 0
  • Option for not update database

    Option for not update database

    Above all, great work! I have a question / request. Is it possible to have an option for not to save a field in database? I explain : I want to get all the power of your system (replace/delete/helpers etc...), but without create a new field in database for each iteration of an initial image. image (with this "image300" is a thumbnail of "image" ) This work perfectly ONLY if field "image300" exist in database.

    To be clear, i dream of an option for $imageFields like "auto_update_database"=> false . Do you think is possible?

    Then maybe I missed something Thanks!

    opened by tomredhot 2
  • Can't resize image on upload

    Can't resize image on upload

    Hi!

    Trying to upload the image and resize it on upload.

    Model (Profile):

    `use HasImageUploads;

    protected static $imageFields = [
        'avatar' => [
            [
                'width' => 300,
                'height' => 300,
                'crop' => false,
                'placeholder' => 'http://placehold.it/300x300',
                'rules' => 'image|max:2000',
    
            ]
        ]
    ];`
    

    Controller: `public function uploadAvatar(Request $request, User $user){

        $request->validate([
            'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
        ]);
    
        $image = $request->file('image');
    
        $user->profile->uploadImage($image, 'avatar');
    
        return response()->json(['url'=>$user->profile->avatar], 200);
    }`
    

    But as a result I'm getting full-size image. What am I doing wrong? Any suggestions appreciated :)

    Thanks in advance :)

    opened by sergeypoprovka 1
  • Proposal for revision

    Proposal for revision

    Hi, Mohd Saqueib Ansari!

    Thank you very much for developing this package.

    I have a suggestion for revision. In the example, you describe a use case  $ user->update ($request->all());

    But I often have a need to pass $ request->book parameters to the update method where the information about the file to be downloaded is kept, for example $request->book->cover  $book->update ($request->book);

    But the autoUpload method cannot automatically download this file, because it checks the existence of the file so

     if (request () -> hasFile ($ requestFileName)) {
                    $ this-> uploadImage (
                        request () -> file ($ requestFileName),
                        $ field
                    );
                }
    

    I have a suggestion to replace this part of the code, so

    if (! empty ($ this-> attributes [$ requestFileName]) and $ this-> attributes [$ requestFileName] instanceof UploadedFile) {
                    $ this-> uploadImage (
                        $ this-> attributes [$ requestFileName],
                        $ field
                    );
                }
    

    As a result, the function will look like this

    protected function autoUpload()
        {
            foreach ($this->getDefinedUploadFields() as $key => $val) {
                $field = is_int($key) ? $val : $key;
                $options = Arr::wrap($val);
    
                // check if global upload is allowed, then in override in option
                $autoUploadAllowed = Arr::get($options, 'auto_upload', $this->canAutoUploadImages());
    
                if (!$autoUploadAllowed) {
                    continue;
                }
    
                // get the input file name
                $requestFileName = Arr::get($options, 'file_input', $field);
    
                if (!empty($this->attributes[$requestFileName]) and $this->attributes[$requestFileName] instanceof UploadedFile) {
                    $this->uploadImage(
                        $this->attributes[$requestFileName],
                        $field
                    );
                }
            }
        }
    

    Do you understand my point? Can you include this change in the release?

    opened by aeremichev 0
  • Image not replacing

    Image not replacing

    I don't know if it is bug or not. I have been trying to update an image but the old image is not deleted/replaced.

    My old code which doesn't delete old image

    if(isset($request->photo)) {
    $model->relation->uploadImage($request->photo);
    }
    

    I change it to below and it does replace old image with the new one

    // Assign it to variable
    $myPhoto = $request->photo;
    
    if(isset($myPhoto)) {
    $model->relation->uploadImage($myPhoto);
    }
    

    I'm on Laravel 5.8 Imageup v1.0.6

    opened by icodeerror 1
Releases(1.2.2)
Owner
QCode.in
QCode.in
PHP library to resize, scale and crop images.

PHP library to resize, scale and crop images.

Gumlet 1.1k Jan 3, 2023
Image Cache is a very simple PHP class that accepts an image source and will compress and cache the file, move it to a new directory, and returns the new source for the image.

NO LONGER MAINTAINED!!! Image Cache v. 1.0.0 Image Cache is a very simple PHP class that accepts an image source and will compress and cache the file,

Erik Nielsen 455 Dec 30, 2022
Image Resize Middleware for Slim Framework

Image Resize Middleware for Slim This middleware implements automatic image resizing based on image filename. Install You can install latest version u

Mika Tuupola 61 Apr 12, 2022
A Laravel Gravatar package for retrieving gravatar image URLs or checking the existance of an image.

Gravatar for Laravel 5.x, 6, 7 and 8 Installation First, pull in the package through Composer via the command line: composer require creativeorange/gr

Creativeorange 477 Dec 1, 2022
This plugin adds a new image style for the Core Image block.

This plugin adds a new image style for the Core Image block. Introduction How to use? Go to Gutenberg Editor and add a image block. e.g. Add new image

Mahesh Waghmare 3 Feb 17, 2022
A PHP GD + TwitterOAuth demo to dynamically generate Twitter header images and upload them via the API.

A PHP GD + TwitterOAuth demo to dynamically generate Twitter header images and upload them via the API. This enables you to build cool little tricks, like showing your latest followers or sponsors, latest content creted, a qrcode to something, a progress bar for some goal, and whathever you can think of.

Erika Heidi 172 Jan 5, 2023
:racehorse: find the size of an image without downloading the whole file. Supports batch requests.

FasterImage FasterImage finds the dimensions or filetype of a remote image file given its uri by fetching as little as needed, based on the excellent

Will Washburn 58 Nov 30, 2022
Upload SVG images in Magento 2.x

Upload SVG images in Magento 2.x This extension for Magento 2 allows uploading SVG images in the following sections: wysiwyg editor in static blocks a

Magegadgets 6 Dec 23, 2022
Alternative image provider for fakerphp using picsum.photos

Fakerphp Picsum Images Introduction Alternative image provider for fakerphp using picsum.photos This package has been forked from mmo/faker-images for

Arnaud Becher 16 Dec 9, 2022
Image optimization / compression library. This library is able to optimize png, jpg and gif files in very easy and handy way. It uses optipng, pngquant, pngcrush, pngout, gifsicle, jpegoptim and jpegtran tools.

Image Optimizer This library is handy and very easy to use optimizer for image files. It uses optipng, pngquant, jpegoptim, svgo and few more librarie

Piotr Śliwa 879 Dec 30, 2022
get nearby location by coordinate from eloquent laravel

LARAVEL-COORDINATE get nearby location data from database with eloquent laravel Installation composer require bagusindrayana/laravel-coordinate In M

Bagus Indrayana 26 Sep 9, 2022
Picasso is a Laravel Image Management and Optimization Package

Picasso is a Laravel Image Management and Optimization Package. Define image dimensions and options, store uploaded image in multiple dimensions with or without a watermark and retrieve optimized images on your website when needed.

Laravelista 82 Nov 24, 2022
A simple page view counter that store data as text and shows data as a PNG image

Image Counter A simple page view counter that store data as text and shows the counter as a PNG image.

Victor Ribeiro 10 Apr 19, 2022
Grabs the dominant color or a representative color palette from an image. Uses PHP and GD, Imagick or Gmagick.

Color Thief PHP A PHP class for grabbing the color palette from an image. Uses PHP and GD or Imagick libraries to make it happen. It's a PHP port of t

Kevin Subileau 610 Dec 28, 2022
image sharing site made in PHP just for fun and freetime

2bart image sharing site made in PHP just for fun and freetime To-do list: upload system [DONE] ✔️ views system [DONE] ✔️ image list system [DONE] ✔️

goom 1 Oct 22, 2021
The Gregwar\Image class purpose is to provide a simple object-oriented images handling and caching API

Gregwar's Image class The Gregwar\Image class purpose is to provide a simple object-oriented images handling and caching API. Installation With compos

Grégoire Passault 958 Dec 29, 2022
An open source image hosting service powered by Laravel

Limg An open source image hosting service powered by Laravel Features Upload your image via file, url or ShareX ! Manage your image (custom title, pub

Thomas 56 Dec 16, 2022
This is an image manipulation REST API written in PHP Laravel Framework

Laravel Image Manipulation REST API Demo Here is fully working Demo: https://www.lobiimages.com/ You have to register first in order to generate acces

TheCodeholic 42 Dec 15, 2022
PHP Image Manipulation

Intervention Image Intervention Image is a PHP image handling and manipulation library providing an easier and expressive way to create, edit, and com

null 13k Jan 3, 2023