All Projects → psliwa → Image Optimizer

psliwa / Image Optimizer

Licence: mit
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.

Projects that are alternatives of or similar to Image Optimizer

Image Optimizer
Easily optimize images using PHP
Stars: ✭ 2,127 (+170.96%)
Mutual labels:  image, gif, png, performance
Compress Images
Minify size your images. Image compression with extension: jpg/jpeg, svg, png, gif. NodeJs
Stars: ✭ 331 (-57.83%)
Mutual labels:  gif, png, image-optimization, pngquant
Flyimg
Dockerized PHP7 application runs as a Microservice to resize and crop images on the fly. Get optimised images with MozJPEG, WebP or PNG using ImageMagick. Includes face detection, cropping, face blurring, image rotation and many other options. Abstract storage based on FlySystem in order to store images on any provider (local, AWS S3...).
Stars: ✭ 762 (-2.93%)
Mutual labels:  image, gif, png
Imaginary
Fast, simple, scalable, Docker-ready HTTP microservice for high-level image processing
Stars: ✭ 4,107 (+423.18%)
Mutual labels:  image, gif, png
Pixterm
Draw images in your ANSI terminal with true color
Stars: ✭ 782 (-0.38%)
Mutual labels:  image, gif, png
Pngquant
Lossy PNG compressor — pngquant command based on libimagequant library
Stars: ✭ 4,086 (+420.51%)
Mutual labels:  png, image-optimization, pngquant
Sharp
High performance Node.js image processing, the fastest module to resize JPEG, PNG, WebP, AVIF and TIFF images. Uses the libvips library.
Stars: ✭ 21,131 (+2591.85%)
Mutual labels:  image, png, performance
Grunt Image
Optimize PNG, JPEG, GIF, SVG images with grunt task.
Stars: ✭ 201 (-74.39%)
Mutual labels:  image, gif, png
image-optimizer
Image optimization using PHP
Stars: ✭ 28 (-96.43%)
Mutual labels:  jpg, png, gif
pngquant
A Python Wrapper of Pngquant
Stars: ✭ 27 (-96.56%)
Mutual labels:  png, image-optimization, pngquant
QuickImageFX
Simplifying image manipulation using GDI, Graphics32, OpenCV or Vampyre Imaging libraries
Stars: ✭ 41 (-94.78%)
Mutual labels:  jpg, png, gif
Gimage
A PHP library for easy image handling. 🖼
Stars: ✭ 148 (-81.15%)
Mutual labels:  image, png, jpg
Image Optimize Command
Easily optimize images using WP CLI
Stars: ✭ 138 (-82.42%)
Mutual labels:  image, pngquant, performance
Sdwebimage
Asynchronous image downloader with cache support as a UIImageView category
Stars: ✭ 23,928 (+2948.15%)
Mutual labels:  image, gif, png
Bbwebimage
A high performance Swift library for downloading, caching and editing web images asynchronously.
Stars: ✭ 128 (-83.69%)
Mutual labels:  image, gif, png
Lilliput
Resize images and animated GIFs in Go
Stars: ✭ 1,690 (+115.29%)
Mutual labels:  image, gif, png
Ccapture.js
A library to capture canvas-based animations at a fixed framerate
Stars: ✭ 2,836 (+261.27%)
Mutual labels:  gif, png, jpg
Scrimage
Java, Scala and Kotlin image processing library
Stars: ✭ 792 (+0.89%)
Mutual labels:  image, gif, png
Gulp Image
Optimize PNG, JPEG, GIF, SVG images with gulp task.
Stars: ✭ 213 (-72.87%)
Mutual labels:  image, gif, png
Crunch
Crunch is a tool for lossy PNG image file optimization. It combines selective bit depth, color type, and color palette reduction with zopfli DEFLATE compression algorithm encoding using the pngquant and zopflipng PNG optimization tools. This approach leads to a significant file size gain relative to lossless approaches at the expense of a relatively modest decrease in image quality (see example images below).
Stars: ✭ 3,074 (+291.59%)
Mutual labels:  image, png, pngquant

Image Optimizer Build Status

This library is handy and very easy to use optimizer for image files. It uses optipng, pngquant, jpegoptim, svgo and few more libraries, so before use it you should install proper libraries on your server. Project contains Vagrantfile that defines testing virtual machine with all libraries installed, so you can check Vagrantfile how to install all those stuff.

Thanks to ImageOptimizer and libraries that it uses, your image files can be 10%-70% smaller.

Installation

Using composer:

composer require ps/image-optimizer

Basic usage

$factory = new \ImageOptimizer\OptimizerFactory();
$optimizer = $factory->get();

$filepath = /* path to image */;

$optimizer->optimize($filepath);
//optimized file overwrites original one

Configuration

By default optimizer does not throw any exception, if file can not be optimized or optimizing library for given file is not installed, optimizer will not touch original file. This behaviour is ok when you want to eventually optimize files uploaded by user. When in your use case optimization fault should cause exception, ignore_errors option was created especially for you.

This library is very smart, you do not have to configure paths to all binaries of libraries that are used by ImageOptimizer, library will be looking for those binaries in few places, so if binaries are placed in standard places, it will be found automatically.

Supported options:

  • ignore_errors (default: true)
  • single_optimizer_timeout_in_seconds (default: 60) - useful when you want to have control how long optimizing lasts. For example in some cases optimizing may not be worth when it takes big amount of time. Pass null in order to turn off timeout.
  • output_filepath_pattern (default: %basename%/%filename%%ext%) - destination where optimized file will be stored. By default it overrides original file. There are 3 placehoders: %basename%, %filename% (without extension and dot) and %ext% (extension with dot) which will be replaced by values from original file.
  • execute_only_first_png_optimizer (default: true) - execute the first successful or all png optimizers
  • execute_only_first_jpeg_optimizer (default: true) - execute the first successful or all jpeg optimizers
  • optipng_options (default: array('-i0', '-o2', '-quiet')) - an array of arguments to pass to the library
  • pngquant_options (default: array('--force'))
  • pngcrush_options (default: array('-reduce', '-q', '-ow'))
  • pngout_options (default: array('-s3', '-q', '-y'))
  • advpng_options (default: array('-z', '-4', '-q'))
  • gifsicle_options (default: array('-b', '-O5'))
  • jpegoptim_options (default: array('--strip-all', '--all-progressive'))
  • jpegtran_options (default: array('-optimize', '-progressive'))
  • svgo_options (default: array('--disable=cleanupIDs'))
  • custom_optimizers (default array())
  • optipng_bin (default: will be guessed) - you can enforce paths to binaries, but by default it will be guessed
  • pngquant_bin
  • pngcrush_bin
  • pngout_bin
  • advpng_bin
  • gifsicle_bin
  • jpegoptim_bin
  • jpegtran_bin
  • svgo_bin

You can pass array of options as first argument of ImageOptimizer\OptimizerFactory constructor. Second argument is optionally Psr\LoggerInterface.

$factory = new \ImageOptimizer\OptimizerFactory(array('ignore_errors' => false), $logger);

Supported optimizers

  • default (smart) - it guess file type and choose optimizer for this file type
  • png - chain of optimizers for png files, by default it uses pngquant and optipng. pngquant is lossy optimization
  • jpg - first of two optimizations will be executed: jpegtran or jpegoptim
  • gif - alias to gifsicle
  • pngquant - homepage
  • optipng - homepage
  • pngcrush - homepage
  • pngout - homepage
  • advpng - homepage
  • jpegtran - homepage
  • jpegoptim - homepage
  • gifsicle - homepage
  • svgo - homepage

You can obtain concrete optimizer by passing his name to ImageOptimizer\OptimizerFactory::get method:

//default optimizer is `smart`
$optimizer = $factory->get();

//png optimizer
$pngOptimizer = $factory->get('png');

//jpegoptim optimizer etc.
$jpgOptimizer = $factory->get('jpegoptim');

Custom optimizers

You can easily define custom optimizers:

$factory = new \ImageOptimizer\OptimizerFactory(array('custom_optimizers' => array(
    'some_optimizier' => array(
        'command' => 'some_command',
        'args' => array('-some-flag')
    )
)), $logger);

And then usage:

$customOptimizer = $factory->get('some_optimizier');

I got "All optimizers failed to optimize the file"

Probably you don't have required optimazers installed. Let's have a look at Vagrantfile file in order to see an example how to install those commands.

In order to see all intermediate errors, you can use logger (be default NullLogger is used, so logs are not available):

class StdoutLogger extends \Psr\Log\AbstractLogger { 
    public function log($level, $message, array $context = array()) { 
        echo $message."\n"; 
    }
}

$factory = new \ImageOptimizer\OptimizerFactory(array(), new StdoutLogger());

$factory->get()->optimize('yourfile.jpg');

// and have a look at stdout

License

MIT

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].