var compress = function(filename, opts) { var fileExt = path.extname(filename||'').replace(".",""); // Compress Images if(config.image_min === true) { if(fileExt == 'png' || fileExt == 'jpg' || fileExt == 'jpeg' || fileExt == 'gif') { imagemin(filename , filename, { optimizationLevel: 4 }, function (err, data) { console.log('Images Compressed!!'); }); } } if (alreadyPacked(filename) || !processable(fileExt)) return; var originalContent = fs.readFileSync(filename).toString(); var minifiedContent = supportedResources[fileExt](originalContent, opts); if (minifiedContent) { if (!opts.silent) { console.log("[info] Minify: " + filename.replace(hexo.public_dir, "")); } fs.unlink( filename, function ( err ) { if ( err ) throw err; fs.writeFile(filename, minifiedContent, 'utf8', function(err) { if (err) throw err; }); }); } };
async.forEachLimit(files, os.cpus().length, function (file, next) { var msg; options.ext = path.extname(file.src[0]); // filter out dirs if (!options.ext) { return next(); } mkdirp.sync(path.dirname(file.dest)); fs.createReadStream(file.src[0]) .pipe(imagemin(options) .on('error', grunt.warn.bind(grunt)) .on('close', function (data) { totalSaved += data.diffSizeRaw; if (data.diffSizeRaw < 10) { msg = 'already optimized'; } else { msg = 'saved ' + data.diffSize + ' - ' + (data.diffSizeRaw / data.origSizeRaw * 100).toFixed() + '%'; } })) .pipe(fs.createWriteStream(file.dest) .on('error', grunt.warn.bind(grunt)) .on('close', function () { grunt.log.writeln(chalk.green('✔ ') + file.src[0] + chalk.gray(' (' + msg + ')')); process.nextTick(next); })); }, function (err) {
async.forEachLimit(images, os.cpus().length, function (file, next) { var saveTarget = path.join(options.resultPath, path.relative(options.watchPath, file)); imagemin(file, saveTarget, options, function (err, data) { formatFileCompressionLog(err, data, file); totalSaved += data.diffSizeRaw; process.nextTick(next); }); }, function (err) {
async.forEachLimit(this.files, os.cpus().length, function (file, next) { imagemin(file.src[0], file.dest, options, function (err, data) { var msg; if (err) { grunt.warn(err); } totalSaved += data.diffSizeRaw; if (data.diffSizeRaw < 10) { msg = 'already optimized'; } else { msg = 'saved ' + data.diffSize; } grunt.log.writeln(chalk.green('✔ ') + file.src[0] + chalk.gray(' (' + msg + ')')); process.nextTick(next); }); }, function (err) {
fs.stat(tempFile, function (err, stats) { if (err) { return cb(new gutil.PluginError('gulp-imagemin', err)); } var origSize = stats.size; imagemin(tempFile, tempFile, options, function () { fs.readFile(tempFile, function (err, data) { if (err) { return cb(new gutil.PluginError('gulp-imagemin', err)); } var saved = origSize - data.length; var savedMsg = saved > 0 ? 'saved ' + filesize(saved, {round: 1}) : 'already optimized'; gutil.log('gulp-imagemin:', gutil.colors.green('✔ ') + file.relative + gutil.colors.gray(' (' + savedMsg + ')')); file.contents = data; cb(null, file); }); }); });
fs.mkdir(path.dirname(saveTarget), function(){ imagemin(filename, saveTarget, options.imageminOptions, function (err, data){ formatFileCompressionLog(err, data, filename); }); });