All Projects → semiromid → Compress Images

semiromid / Compress Images

Licence: mit
Minify size your images. Image compression with extension: jpg/jpeg, svg, png, gif. NodeJs

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Compress Images

Essential Image Optimization
Essential Image Optimization - an eBook
Stars: ✭ 1,950 (+489.12%)
Mutual labels:  gif, png, jpeg, image-compression, image-optimization, compression
Leanify
lightweight lossless file minifier/optimizer
Stars: ✭ 694 (+109.67%)
Mutual labels:  minify, svg, png, jpeg, compression
Optimizt
CLI image optimization tool
Stars: ✭ 594 (+79.46%)
Mutual labels:  svg, gif, png, jpeg, image-compression
Imagemin
[Unmaintained] Minify images seamlessly
Stars: ✭ 4,948 (+1394.86%)
Mutual labels:  minify, svg, gif, png
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 (+130.21%)
Mutual labels:  gif, png, jpeg, compression
zImageOptimizer
Simple image optimizer for JPEG, PNG and GIF images on Linux, MacOS and FreeBSD.
Stars: ✭ 108 (-67.37%)
Mutual labels:  png, jpeg, image-compression, image-optimization
Image Optimizer
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.
Stars: ✭ 785 (+137.16%)
Mutual labels:  gif, png, image-optimization, pngquant
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 (+828.7%)
Mutual labels:  png, image-compression, pngquant, compression
Govips
A lightning fast image processing and resizing library for Go
Stars: ✭ 442 (+33.53%)
Mutual labels:  svg, gif, png, jpeg
Imager
Automated image compression for efficiently distributing images on the web.
Stars: ✭ 266 (-19.64%)
Mutual labels:  jpeg, image-compression, image-optimization, compression
Libvips
A fast image processing library with low memory needs.
Stars: ✭ 6,094 (+1741.09%)
Mutual labels:  svg, gif, png, jpeg
Pyecharts Snapshot
renders the output of pyecharts as png, jpeg, gif, svg, eps, pdf and raw base64
Stars: ✭ 142 (-57.1%)
Mutual labels:  svg, gif, png, jpeg
Image Shrinker
App for macOS. Minify your images and graphics with just one drop. Autorenamed in the same place where it comes from. Immediately!
Stars: ✭ 217 (-34.44%)
Mutual labels:  minify, image-compression, pngquant
TinyJPG
images jpg or jpeg compressed and watcher fsnotify
Stars: ✭ 73 (-77.95%)
Mutual labels:  compression, jpeg, image-compression
pngloss
Lossy compression of PNG images
Stars: ✭ 73 (-77.95%)
Mutual labels:  png, image-compression, image-optimization
alfred-imagemin
Alfred workflow - Minify images with Imagemin
Stars: ✭ 29 (-91.24%)
Mutual labels:  png, jpeg, gif
gfxprim
Open-source modular 2D bitmap graphics library with emphasis on speed and correctness.
Stars: ✭ 32 (-90.33%)
Mutual labels:  png, jpeg, gif
Density Converter
A multi platform image density converting tool converting single or batches of images to Android, iOS, Windows or CSS specific formats and density versions given the source scale factor or width/height in dp. It has a graphical and command line interface and supports many image types (svg, psd, 9-patch, etc.) aswell as some lossless compressors like pngcrush.
Stars: ✭ 222 (-32.93%)
Mutual labels:  svg, png, jpeg
StbSharp
C# port of the famous C framework
Stars: ✭ 62 (-81.27%)
Mutual labels:  png, jpeg, gif
sail
The missing small and fast image decoding library for humans (not for machines) ⛵ https://sail.software
Stars: ✭ 206 (-37.76%)
Mutual labels:  png, jpeg, gif

Compress-images

Build Status

compress-images Minify size your images. Image compression with extension: jpg/jpeg, svg, png, gif.

Minify size your images. Image compression with extension: jpg/jpeg, svg, png, gif.

Image

Features

You can use different algorithms and methods for compressing images with many options.

  • For JPG: jpegtran, mozjpeg, webp, guetzli, jpegRecompress, jpegoptim, tinify;
  • For PNG: pngquant, optipng, pngout, webp, pngcrush, tinify;
  • For SVG: svgo;
  • For GIF: gifsicle, giflossy, gif2webp;
Combine compression

You can even minify images by using a combination of compression algorithms. As an example - mozjpeg + jpegoptim or jpegtran + mozjpeg or any other algorithm.

Saving error log

If you get an error, the error log will be saved. Default path ./log/compress-images.

Alternative configuration/algorithm for compressing images

If you get an error, alternative algorithms for compressing images can be used. As an example: you want to compress images in jpegRecompress, but you get the error Unsupported color conversion request, so an alternative algorithm to compress the images can be used, like mozjpeg.

Detect path for saving images

You can specify the path to source images folder and all images in the folder will be compressed and moved to output folder.

As an example, one of many:

    INPUT ['src/img/source/**/*.{jpg,JPG,jpeg,JPEG,gif,png,svg}']
    OUTPUT ['build/img/']
Note

You should have in your path slash: /. If you have slash \ it may be to replaced: input.replace(/\\/g, '/');

Image

Get started

Install

npm install compress-images --save-dev

Examples of how to use it

Base example

https://github.com/semiromid/compress-images/tree/master/example

Example 1

const compress_images = require("compress-images"),
  INPUT_path_to_your_images,
  OUTPUT_path;

INPUT_path_to_your_images = "src/img/**/*.{jpg,JPG,jpeg,JPEG,png,svg,gif}";
OUTPUT_path = "build/img/";

compress_images(INPUT_path_to_your_images, OUTPUT_path, { compress_force: false, statistic: true, autoupdate: true }, false,
                { jpg: { engine: "mozjpeg", command: ["-quality", "60"] } },
                { png: { engine: "pngquant", command: ["--quality=20-50", "-o"] } },
                { svg: { engine: "svgo", command: "--multipass" } },
                { gif: { engine: "gifsicle", command: ["--colors", "64", "--use-col=web"] } },
  function (error, completed, statistic) {
    console.log("-------------");
    console.log(error);
    console.log(completed);
    console.log(statistic);
    console.log("-------------");
  }
);

Example 2

const compress_images = require("compress-images");

function MyFun() {
  compress_images(
    "src/img/**/*.{jpg,JPG,jpeg,JPEG,png,svg,gif}",
    "build/img/",
    { compress_force: false, statistic: true, autoupdate: true },
    false,
    { jpg: { engine: "mozjpeg", command: ["-quality", "60"] } },
    { png: { engine: "pngquant", command: ["--quality=20-50", "-o"] } },
    { svg: { engine: "svgo", command: "--multipass" } },
    {
      gif: { engine: "gifsicle", command: ["--colors", "64", "--use-col=web"] },
    },
    function (err, completed) {
      if (completed === true) {
        // Doing something.
      }
    }
  );
}

Example 3

const compress_images = require('compress-images');

// We will be compressing images [jpg] with two algorithms, [webp] and [jpg];

//[jpg] ---to---> [webp]
compress_images(
  "src/img/**/*.{jpg,JPG,jpeg,JPEG}",
  "build/img/",
  { compress_force: false, statistic: true, autoupdate: true },
  false,
  { jpg: { engine: "webp", command: false } },
  { png: { engine: false, command: false } },
  { svg: { engine: false, command: false } },
  { gif: { engine: false, command: false } },
  function (err) {
    if (err === null) {
      //[jpg] ---to---> [jpg(jpegtran)] WARNING!!! autoupdate  - recommended to turn this off, it's not needed here - autoupdate: false
      compress_images(
        "src/img/**/*.{jpg,JPG,jpeg,JPEG}",
        "build/img/",
        { compress_force: false, statistic: true, autoupdate: false },
        false,
        { jpg: { engine: "jpegtran", command: false } },
        { png: { engine: false, command: false } },
        { svg: { engine: false, command: false } },
        { gif: { engine: false, command: false } },
        function () {}
      );
    } else {
      console.error(err);
    }
  }
);

Example 4

const compress_images = require('compress-images');

// Combine compressing images [jpg] with two different algorithms, [jpegtran] and [mozjpeg];
//[jpg] ---to---> [jpg(jpegtran)]
compress_images(
  "src/img/source/**/*.{jpg,JPG,jpeg,JPEG}",
  "src/img/combination/",
  { compress_force: false, statistic: true, autoupdate: true },
  false,
  {
    jpg: {
      engine: "jpegtran",
      command: ["-trim", "-progressive", "-copy", "none", "-optimize"],
    },
  },
  { png: { engine: false, command: false } },
  { svg: { engine: false, command: false } },
  { gif: { engine: false, command: false } },
  function () {
    //[jpg(jpegtran)] ---to---> [jpg(mozjpeg)] WARNING!!! autoupdate  - recommended to turn this off, it's not needed here - autoupdate: false
    //----------------
    compress_images(
      "src/img/combination/**/*.{jpg,JPG,jpeg,JPEG}",
      "build/img/",
      { compress_force: false, statistic: true, autoupdate: false },
      false,
      { jpg: { engine: "mozjpeg", command: ["-quality", "75"] } },
      { png: { engine: false, command: false } },
      { svg: { engine: false, command: false } },
      { gif: { engine: false, command: false } },
      function () {}
    );
    //----------------
  }
);

Example 5

const compress_images = require('compress-images');

//[jpg+gif+png+svg] ---to---> [jpg(webp)+gif(gifsicle)+png(webp)+svg(svgo)]
compress_images('src/img/source/**/*.{jpg,JPG,jpeg,JPEG,gif,png,svg}', 'build/img/', {compress_force: false, statistic: true, autoupdate: true}, false,
                                            {jpg: {engine: 'webp', command: false}},
                                            {png: {engine: 'webp', command: false}},
                                            {svg: {engine: 'svgo', command: false}},
                                            {gif: {engine: 'gifsicle', command: ['--colors', '64', '--use-col=web']}}, function(){
      //-------------------------------------------------                                    
      //[jpg] ---to---> [jpg(jpegtran)] WARNING!!! autoupdate  - recommended to turn this off, it's not needed here - autoupdate: false
      compress_images('src/img/source/**/*.{jpg,JPG,jpeg,JPEG}', 'src/img/combine/', {compress_force: false, statistic: true, autoupdate: false}, false,
                                                      {jpg: {engine: 'jpegtran', command: ['-trim', '-progressive', '-copy', 'none', '-optimize']}},
                                                      {png: {engine: false, command: false}},
                                                      {svg: {engine: false, command: false}},
                                                      {gif: {engine: false, command: false}}, function(){
            //[jpg(jpegtran)] ---to---> [jpg(mozjpeg)] WARNING!!! autoupdate  - recommended to turn this off, it's not needed here - autoupdate: false
            compress_images('src/img/combine/**/*.{jpg,JPG,jpeg,JPEG}', 'build/img/', {compress_force: false, statistic: true, autoupdate: false}, false,
                                                            {jpg: {engine: 'mozjpeg', command: ['-quality', '75']}},
                                                            {png: {engine: false, command: false}},
                                                            {svg: {engine: false, command: false}},
                                                            {gif: {engine: false, command: false}}, function(){
                  //[png] ---to---> [png(pngquant)] WARNING!!! autoupdate  - recommended to turn this off, it's not needed here - autoupdate: false
                  compress_images('src/img/source/**/*.png', 'build/img/', {compress_force: false, statistic: true, autoupdate: false}, false,
                                                                  {jpg: {engine: false, command: false}},
                                                                  {png: {engine: 'pngquant', command: ['--quality=30-60', '-o']}},
                                                                  {svg: {engine: false, command: false}},
                                                                  {gif: {engine: false, command: false}}, function(){                                                      
                  }); 
            });                                      
      });
      //-------------------------------------------------
});

Example 6

Sometimes you could get errors, and then use alternative configuration "compress-images". As an example, one of many:

  1. If you get an error from 'jpegRecompress', for example, the error "Unsupported color conversion request". In this case, an alternative image compression algorithm will be used.

  2. An error log will be created at path './log/lib/compress-images'.

  3. The algorithm 'mozjpeg' will attempt to be used instead.

    const 
    compress_images = require('compress-images'),
    INPUT_path_to_your_images = 'src/**/*.{jpg,JPG,jpeg,JPEG,png,svg,gif}',
    OUTPUT_path = 'build/';
    
    compress_images(INPUT_path_to_your_images, OUTPUT_path, {compress_force: false, statistic: true, autoupdate: true, pathLog: './log/lib/compress-images'}, false,
                                                {jpg: {engine: 'jpegRecompress', command: ['--quality', 'high', '--min', '60']}},
                                                {png: {engine: 'pngquant', command: ['--quality=20-50', '-o']}},
                                                {svg: {engine: 'svgo', command: '--multipass'}},
                                                {gif: {engine: 'gifsicle', command: ['--colors', '64', '--use-col=web']}}, function(err, completed){
            if(err !== null){
                //---------------------------------------
                //if you get an ERROR from 'jpegRecompress' ---> We can use alternate config of compression
                //---------------------------------------
                if(err.engine === 'jpegRecompress'){
                    compress_images(err.input, err.output, {compress_force: false, statistic: true, autoupdate: true}, false,
                                                                {jpg: {engine: 'mozjpeg', command: ['-quality', '60']}},
                                                                {png: {engine: false, command: false}},
                                                                {svg: {engine: false, command: false}},
                                                                {gif: {engine: false, command: false}}, function(err){
                            if(err !== null){
                                //Alternative config of compression

                            }                                       
                    });
                }
                //---------------------------------------

            }                                       

    });

Example 7

Compressing an image in the same folder

    const 
    compress_images = require('compress-images'),
    fs = require('fs'),
    INPUT_path_to_your_images = 'src/img/**/!(*-min).png',
    OUTPUT_path = 'src/img/';
    
    compress_images(INPUT_path_to_your_images, OUTPUT_path, {compress_force: true, statistic: false, autoupdate: true}, false,
                                                {jpg: {engine: false, command: false}},
                                                {png: {engine: 'pngquant', command: ['--quality=20-50', '--ext=-min.png', '--force']}},
                                                {svg: {engine: false, command: false}},
                                                {gif: {engine: false, command: false}}, function(err, completed, statistic){
        if(err === null){
            fs.unlink(statistic.input, (err) => {
                if (err) throw err;
                console.log('successfully compressed and deleted '+statistic.input);
            });
        }
    });
    <picture>
        <source type="image/webp" srcset="//hostname/build/img/art/1/chat.webp">
        <img width="700" height="922" alt="test" src="//hostname/build/img/art/1/chat.jpg">
    </picture>

API

compress_images(input, output, option, globoption, enginejpg, enginepng, enginesvg, enginegif, callback)

  • input (type:string): Path to source image or images;
    Example:
    1. 'src/img/**/*.{jpg,JPG,jpeg,JPEG,png,svg,gif}';
    2. 'src/img/**/*.jpg';
    3. 'src/img/*.jpg';
    4. 'src/img/myimagename.jpg';

  • output (type:string): Path to compress images;
    Example:
    1. 'build/img/';

  • option (type:plainObject): Options module`s «compress-images»;

    • compress_force (type:boolean): Force compress images already compressed images true or false;
    • statistic (type:boolean): show image compression statistics true or false;
    • pathLog (type:string): Path to log file. Default is ./log/compress-images;
    • autoupdate (type:boolean): Auto-update module «compress_images» to the latest version true or false;
      Example:
      1. {compress_force: false, statistic: true, autoupdate: true};
  • globoption (type:boolean|other): Options module`s glob. Also you can set false;

  • enginejpg (type:plainObject): Engine for compressing jpeg and options compress. Key to be jpg;

    • engine (type:string): Engine for compressing jpeg. Possible values: jpegtran,mozjpeg, webp, guetzli, jpegRecompress, jpegoptim, tinify;
    • command (type:boolean|array): Options for compression. Can be false or commands array.
      • For jpegtran - ['-trim', '-progressive', '-copy', 'none', '-optimize'] in details; jpegtran;

      • For mozjpeg - ['-quality', '10'] in details mozjpeg;

      • For webp - ['-q', '60'] in details webp;

      • For guetzli - ['--quality', '84'] (Very long compresses on Win 8.1 https://github.com/google/guetzli/issues/238) in details guetzli; To use guetzli you must npm install guetzli --save, this library does not work properly on some OS and platforms.

      • For jpegRecompress - ['--quality', 'high', '--min', '60'] in details jpegRecompress;

      • For jpegoptim - ['--all-progressive', '-d'] To use jpegoptim you must npm install jpegoptim-bin --save, this library does not work properly on some OS and platforms. from https://github.com/imagemin/jpegoptim-bin Issues! May be a problems with installation and use on Win 7 x32 and maybe other OS: compress-images - issues/21 Caution! if do not specify '-d' all images will be compressed in the source folder and will be replaced. For Windows x32 and x63 also, you can use https://github.com/vikas5914/jpegoptim-win. Copy jpegoptim-32.exe and replace and rename in "node_modules\jpegoptim-bin\vendor\jpegoptim.exe"

      • For tinify - ['copyright', 'creation', 'location'] In details tinify;

    • key (type:string): Key used for engine tinify. In details; tinify;
      Example:
      1. {jpg: {engine: 'mozjpeg', command: ['-quality', '60']};
      2. {jpg: {engine: 'tinify', key: "sefdfdcv335fxgfe3qw", command: ['copyright', 'creation', 'location']}};
      3. {jpg: {engine: 'tinify', key: "sefdfdcv335fxgfe3qw", command: false}};
  • enginepng (type:plainObject): Engine for compressing png and options for compression. Key to be png;

    • engine (type:string): Engine for compressing png. Possible values: pngquant,optipng, pngout, webp, pngcrush, tinify;
    • command (type:boolean|array): Options for compression. Can be false or commands array.
      • For pngquant - ['--quality=20-50', '-o'] If you want to compress in the same folder, as example: ['--quality=20-50', '--ext=.png', '--force']. To use this library you need to install it manually. It does not work properly on some OS (Win 7 x32 and maybe other). npm install pngquant-bin --save Quality should be in format min-max where min and max are numbers in range 0-100. Can be problems with cyrillic filename issues/317 In details: pngquant and pngquant-bin - wrapper
      • For optipng - To use this library you need to install it manually. It does not work properly on some OS (Win 7 x32 and maybe other). npm install --save optipng-bin in details optipng-bin - wrapper and optipng;
      • For pngout - in details pngout;
      • For webp - ['-q', '60'] in details webp;
      • For pngcrush (It does not work properly on some OS) - ['-reduce', '-brute'] in details pngcrush;
      • For tinify - ['copyright', 'creation', 'location'] in details tinify;
    • key (type:string): Key used for engine tinify. In details; tinify;
      Example:
      1. {png: {engine: 'webp', command: ['-q', '100']};
      2. {png: {engine: 'tinify', key: "sefdfdcv335fxgfe3qw", command: ['copyright', 'creation', 'location']}};
      3. {png: {engine: 'optipng', command: false}};
  • enginesvg (type:plainObject): Engine for compressing svg and options for compression. Key to be svg;

    • engine (type:string): Engine for compressing svg. Possible values: svgo;
    • command (type:string): Options for compression. Can be false or commands type string.
      • For svgo - '--multipass' in details svgo;
        Example:
        1. {svg: {engine: 'svgo', command: '--multipass'};
        2. {svg: {engine: 'svgo', command: false}};
  • enginegif (type:plainObject): Engine for compressing gif and options for compression. Key to be gif;

    • engine (type:string): Engine for compressing gif. Possible values: gifsicle, giflossy, gif2webp;
    • command (type:boolean|array): Options for compression. Can be false or commands type array.
      • For gifsicle - To use this library you need to install it manually. It does not work properly on some OS. npm install gifsicle --save. Example options:
        ['--colors', '64', '--use-col=web'] or ['--optimize'] In details gifsicle;
      • For giflossy - (For Linux x64 and Mac OS X) ['--lossy=80'] In details giflossy;
      • For gif2webp - ['-f', '80', '-mixed', '-q', '30', '-m', '2'] in details gif2webp;
        Example:
        1. {gif: {engine: 'gifsicle', command: ['--colors', '64', '--use-col=web', '--scale', ' 0.8']}};
        2. {gif: {engine: 'giflossy', command: false}};
        3. {gif: {engine: 'gif2webp', command: ['-f', '80', '-mixed', '-q', '30', '-m', '2']}};
  • callback (err, completed, statistic): returns:

    • err (type:json object|null)
      • engine - The name of the algorithm engine
      • input - The path to the input image
      • output - The path to the output image
    • completed (type:boolean)
      • true - result completed.
      • false - result not completed.
    • statistic (type:json object)
      • input
      • path_out_new
      • algorithm
      • size_in
      • size_output
      • percent
      • err

How to use promise API

Example 1

    const { compress } = require('compress-images/promise');
    const INPUT_path_to_your_images = 'src/img/**/*.{jpg,JPG,jpeg,JPEG,png}';
    const OUTPUT_path = 'build/img/';

    const processImages = async () => {
        const result = await compress({
            source: INPUT_path_to_your_images,
            destination: OUTPUT_path,
            enginesSetup: {
                jpg: { engine: 'mozjpeg', command: ['-quality', '60']},
                png: { engine: 'pngquant', command: ['--quality=20-50', '-o']},
            }
        });

        const { statistics, errors } = result;
        // statistics - all processed images list
        // errors - all errros happened list
    };

    processImages();

Example 2

Using onProgress

    const { compress } = require('compress-images/promise');
    const INPUT_path_to_your_images = 'src/img/**/*.{jpg,JPG,jpeg,JPEG,png}';
    const OUTPUT_path = 'build/img/';

    const processImages = async (onProgress) => {
        const result = await compress({
            source: INPUT_path_to_your_images,
            destination: OUTPUT_path,
            onProgress,
            enginesSetup: {
                jpg: { engine: 'mozjpeg', command: ['-quality', '60']},
                png: { engine: 'pngquant', command: ['--quality=20-50', '-o']},
            }
        });

        const { statistics, errors } = result;
        // statistics - all processed images list
        // errors - all errros happened list
    };

    processImages((error, statistic, completed) => {
        if (error) {
            console.log('Error happen while processing file');
            console.log(error);
            return;
        }

        console.log('Sucefully processed file');

        console.log(statistic)
    });

Promised API

promise/compress(params)

  • params (type:plainObject): Module options;

    • source (type:string): input, see above;
    • destination (type:string): output, see above;
    • enginesSetup (type:plainObject): Engines setup mapping, only needed ones, for example: { jpg: <enginejpg>, png: <enginepng> }, see details above;
    • (optional) params (type:plainObject): Options module`s «compress-images», see option above;
    • (optional) globOptions (type:boolean|other): see globoption above;
    • (optional) onProgress (err, statistic, completed): see callback above
  • returns Promise with object:

    • statistics (type:statistic[]), see above;
    • errors (type:err[]), see above;

Donate

Image If this is a useful thing for you, support the project.

PayPal | https://www.paypal.com/myaccount/transfer/send [email protected]

Visa Card | 4731 1856 1426 6432 First name and Last name: SEMINA TAMARA or SEMINA TAMARA PETROVNA

Payeer | payeer.com No.[P77135727]

PaYoneer | https://www.payoneer.com [email protected]


Related

gif2webp https://developers.google.com/speed/webp/docs/gif2webp author is Google;

Node package giflossy https://www.npmjs.com/package/giflossy Author is Jihchi;

gifsicle and giflossy http://www.lcdf.org/gifsicle/ author is Eddie Kohler;

gifsicle-bin https://github.com/imagemin/gifsicle-bin author is Kevva;

svgo https://www.npmjs.com/package/svgo author is Greli;

pngcrush https://pmt.sourceforge.io/pngcrush/ author is Glenn Randers-Pehrson;

pngcrush-bin https://github.com/imagemin/pngcrush-bin author is Kevva;

webp https://developers.google.com/speed/webp/ author is Google;

pngout http://advsys.net/ken/util/pngout.htm author is Kerry Watson, with updates by Ken Silverman and Matthew Fearnley;

pngout-bin https://github.com/imagemin/pngout-bin author is 1000ch;

pngquant https://pngquant.org/ author is Kornel Lesiński and contributors. It's based on code by Greg Roelofs and Jef Poskanzer;

pngquant-bin https://github.com/imagemin/pngquant-bin author is Kevva;

tinypng https://tinypng.com/developers/reference/nodejs author is Voormedia;

tinyjpg https://tinyjpg.com/ author is Voormedia;

jpegoptim https://github.com/tjko/jpegoptim author is Tjko;

jpegoptim-bin https://github.com/imagemin/jpegoptim-bin author is 1000ch;

jpeg-archive https://github.com/danielgtaylor/jpeg-archive author is Danielgtaylor;

jpeg-recompress-bin https://github.com/imagemin/jpeg-recompress-bin author is 1000ch;

guetzli https://github.com/google/guetzli author is Google;

guetzli-bin https://github.com/imagemin/guetzli-bin author is 1000ch;

mozjpeg-bin https://github.com/imagemin/mozjpeg-bin author is 1000ch;

mozjpeg https://github.com/mozilla/mozjpeg author is Pornel;

jpegtran-bin https://github.com/imagemin/jpegtran-bin author is 1000ch;

libjpeg-turbo https://libjpeg-turbo.org/ author is Dcommander;

Vectors https://www.flaticon.com/authors/vectors-market author is Vectors Market;

colors https://www.npmjs.com/package/colors author is Marak;

glob https://www.npmjs.com/package/glob author is Isaacs;

mkdirp https://www.npmjs.com/package/mkdirp author is Substack;

bytes https://www.npmjs.com/package/bytes author is Dougwilson;

Разработка сайтов Веб-студия Харьков

Bugs

Author

SEMINA TAMARA

License

MIT License

Copyright (c) 2017 TAMARA SEMINA

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

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].