Picasso is a Laravel Image Management and Optimization Package

Overview

Picasso

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.

Become a Patron

Overview

To reduce site size and improve site loading time, this packages enables you to:

  • resize image to multiple dimensions; [width x height with upscale] ('news_thumbnail', 'news_gallery', 'news_cover', ...)
  • retrieve optimized image for specific position get('news_cover')
  • apply watermark on images that need it (task in progress)
  • quickly change the image dimension and update all, subset or a single image with optimized size
  • implement this package in any phase of your application
  • to use this package on your whole site or just a part of it
  • set global or individual image quality (default 60)
  • set global or individual image format (default webp)

How it works

In the config file you define the dimension width and height, (format and quality are optional) and unique name for that dimension. In your controller call $picasso->optimize('images/image.jpg', ['home_slideshow_large', 'home_slideshow_thumbnail']'). This method takes the original image, optimizes it according to the entered dimensions, saves it to storage and saves the record to the manifest file

Later, when you call Picasso::get('images/image.jpg', 'home_slideshow_large') you will get the optimized image.

Benefits

You can keep your original user uploaded images untouched (2MB or more). This package will create new optimized images and keep reference of the original and optimized in the manifest file.

Your page will load faster because it will have less MB to download because the images will be smaller. I have managed to reduce image size from 2.4MB to 700Kb, just by implementing this package as an addon later in the development phase.

Installation

From the command line:

composer require laravelista/picasso

Publish the config file picasso.php to your /config directory:

php artisan vendor:publish --provider="Laravelista\Picasso\ServiceProvider" --tag=config

Installation complete!

Configuration

Before continuing be sure to open the /config/picasso.php file and update the dimensions and quality to your needs.

Usage

There are a few ways to implement this package in your application. I will try to cover them all.

Store method

After you have stored the user uploaded image in your storage UploadedFile $image->store('images') and you have retrieved the path to the image. Give that path (that you would usually store in the database) to picasso:

use Laravelista\Picasso\Picasso;

public function store(Request $request, Picasso $picasso)
{
    // ...

    // store original image in storage
    $article->image = $request->image->store('images');

    // optimize original image to desired dimensions
    $picasso->optimize($article->image, ['news_small', 'news_cover']);

    // ...
}

Update method

When the user is going to replace the existing image with a new one, we have to first purge all records from storage and manifest file of the old image and then optimize the new image:

use Laravelista\Picasso\Picasso;

public function update(Request $request, Article $article, Picasso $picasso)
{
    // ...

    if ($request->hasFile('image')) {

        // delete original image from storage
        Storage::delete($article->image);

        // delete all optimized images for old image
        $picasso->drop($article->image, ['news_small', 'news_cover']);

        // save new original image to storage and retrieve the path
        $article->image = $request->image->store('images');

        // optimize new original image
        $picasso->optimize($article->image, ['news_small', 'news_cover']);
    }

    // ...
}

Destroy method

When deleting a record which has optimized images, be sure to delete optimized image also to reduce unused files:

use Laravelista\Picasso\Picasso;

public function destroy(Article $article, Picasso $picasso)
{
    // ...

    // delete original image
    Storage::delete($article->image);

    // delete optimized images
    $picasso->purge($article->image);

    // delete record from database
    $article->delete();

    // ...
}

Optimizing already uploaded and saved images

My suggestion is to create a console route for this. I will show you how I do this in my applications. In routes/console.php and this route:

use Laravelista\Picasso\Picasso;

Artisan::command('picasso:article-optimize', function (Picasso $picasso) {

    $images = Article::all()->pluck('image')->toArray();

    $picasso->optimize($images, ['news_small', 'news_cover']);

    $this->comment("Article images optimized!");
});

Now from the command line you can call php artisan picasso:article-optimize whenever you want and it will grab the original images for table article, created optimized images, create/update optimized images in storage and update the reference in the database.

Retrieving optimized images

From your view files do:

image, 'news_small') }}" /> ">

This line will retrieve the optimized image URL.

API

For now, there are only four main methods in Picasso:

optimize(string|array $image, string|array $dimension, string $disk = null)

This method creates optimized images in desired dimensions for given images or image.

It accepts an array of image paths or a single image path. It accepts an array of valid dimensions (as defined in the configuration) or a single dimension The last parameter is the disk where to save the optimized image.

get(string $image, string $dimension, string $disk = null)

This method retrieves the optimized image for given original image path and desired dimension.

The last parameter is the disk on which to perform this operation.

drop(string $image, string|array $dimension, string $disk = null)

Thi method deletes optimized images from storage for given image path and dimension or dimensions.

The last parameter is the disk on which to perform this operation.

purge(string $image, string $disk = null)

Thi method deletes all optimized images from storage for given image path.

The last parameter is the disk on which to perform this operation.

Development

# Install dependencies
composer install

# Run Psalm
vendor/bin/psalm

# Format code
vendor/bin/php-cs-fixer fix

Sponsors & Backers

I would like to extend my thanks to the following sponsors & backers for funding my open-source journey. If you are interested in becoming a sponsor or backer, please visit the Backers page.

Contributing

Thank you for considering contributing to Picasso! The contribution guide can be found Here.

Code of Conduct

In order to ensure that the open-source community is welcoming to all, please review and abide by the Code of Conduct.

License

Picasso is open-source software licensed under the MIT license.

You might also like...
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

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

PHP 5.3 Object Oriented image manipulation library

Imagine Tweet about it using the #php_imagine hashtag. Image manipulation library for PHP 5.3 inspired by Python's PIL and other image libraries. Requ

Wonderfully easy on-demand image manipulation library with an HTTP based API.
Wonderfully easy on-demand image manipulation library with an HTTP based API.

Glide Glide is a wonderfully easy on-demand image manipulation library written in PHP. Its straightforward API is exposed via HTTP, similar to cloud i

🌄 Perceptual image hashing for PHP
🌄 Perceptual image hashing for PHP

ImageHash A perceptual hash is a fingerprint of a multimedia file derived from various features from its content. Unlike cryptographic hash functions

: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

Extract colors from an image like a human would do.

ColorExtractor Extract colors from an image like a human would do. Install Via Composer $ composer require league/color-extractor:0.3.* Usage require

php-gd based image templates
php-gd based image templates

gdaisy A highly experimental image templating system based on PHP-GD to dynamically generate image banners and covers. Installation 1. Require erikahe

Convert image types. Take samples of pdfs or psd, do some filters as SEPIA, resizes. Save to WEBP
Convert image types. Take samples of pdfs or psd, do some filters as SEPIA, resizes. Save to WEBP

img2img. PHP Converter, sampler of pdfs & psd, do resizes & some filters in images as SEPIA. Save to WEBP V.1.0.3 This class in pure PHP try to manage

Comments
  • Implement dot notation for dimensions

    Implement dot notation for dimensions

    'dimensions' => [
            'mobileapp' => [
                'accommodations' => [
                    'index' => [
                        'width' => 720,
                        'height' => 1280
                    ],
                    'show' => [
                        'width' => 1280,
                        'height' => 720
                    ]
                ]
            ],
            'news_small' => [
                'width' => 244,
                'height' => 352,
            ],
    ]
    

    When using:

    $picasso->optimize($images, [
        'mobileapp.accommodations.index', 'mobileapp.accommodations.show'
    ]);
    
    enhancement 
    opened by mabasic 0
  • Roadmap for new version

    Roadmap for new version

    • [ ] Better package name.
    • [ ] Package should log missing optimized images not throw an exception.
    • [ ] The package should try to get the optimized image, but it should fallback to the original image.
    • [ ] The package should be able to integrate with models, so that the developer can query if the optimized image is available and get all optimized images etc.
    • [ ] The package should be able to handle optimizing "static" images
    • [ ] The original images should be kept private by default, but should also be able to be kept public.
    • [ ] Maybe implement spatie package for image optimization?
    enhancement 
    opened by mabasic 0
Releases(0.8.0)
Owner
Laravelista
Specialized in building Web & Mobile Apps
Laravelista
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
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
Auto Image & file upload, resize and crop for Laravel eloquent model using Intervention image

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

QCode.in 708 Dec 22, 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 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
PHP library to easily edit image with GD extension. Resize, crop, merge, draw, and many more options !

PHP Image Editor PHP library to easily edit image with GD extension. Resize, crop, merge, draw, and many more options ! ✨ Supporting ⭐ Star this repos

Franck Alary 17 Nov 13, 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