UNPKG

gulp-image-optimization

Version:

Minify PNG, JPEG and GIF images. this is based on https://github.com/sindresorhus/gulp-imagemin with stream-limit implementation

58 lines (48 loc) 2.14 kB
'use strict'; var path = require('path'); var fs = require('graceful-fs'); var gutil = require('gulp-util'); var map = require('map-stream-limit'); var filesize = require('filesize'); var tempWrite = require('temp-write'); var imagemin = require('image-min'); module.exports = function(options) { return map(function(file, cb) { if (file.isNull()) { return cb(null, file); } if (file.isStream()) { return cb(new gutil.PluginError('gulp-image-optimization', 'Streaming not supported')); } if (['.jpg', '.jpeg', '.png', '.gif'].indexOf(path.extname(file.path)) === -1) { gutil.log('gulp-image-optimization: Skipping unsupported image ' + gutil.colors.blue(file.relative)); return cb(null, file); } tempWrite(file.contents, path.extname(file.path), function(err, tempFile) { if (err) { return cb(new gutil.PluginError('gulp-image-optimization', err)); } // workaround: https://github.com/kevva/image-min/issues/8 fs.stat(tempFile, function(err, stats) { if (err) { return cb(new gutil.PluginError('gulp-image-optimization', err)); } var origSize = stats.size; imagemin(tempFile, tempFile, options, function() { fs.readFile(tempFile, function(err, data) { if (err) { return cb(new gutil.PluginError('gulp-image-optimization', err)); } var saved = origSize - data.length; var savedMsg = saved > 0 ? 'saved ' + filesize(saved, { round: 1 }) : 'already optimized'; gutil.log('gulp-image-optimization:', gutil.colors.green('✔ ') + file.relative + gutil.colors.gray(' (' + savedMsg + ')')); file.contents = data; cb(null, file); }); }); }); }); }, 10); };