|
@@ -1,8 +1,10 @@
|
|
|
-var debug = require('debug')('ylt:imageOptimizer');
|
|
|
-
|
|
|
-var Q = require('q');
|
|
|
-var Imagemin = require('imagemin');
|
|
|
-var jpegoptim = require('imagemin-jpegoptim');
|
|
|
+var debug = require('debug')('ylt:imageOptimizer');
|
|
|
+var Q = require('q');
|
|
|
+var imagemin = require('imagemin');
|
|
|
+var imageminJpegtran = require('imagemin-jpegtran');
|
|
|
+var imageminJpegoptim = require('imagemin-jpegoptim');
|
|
|
+var imageminOptipng = require('imagemin-optipng');
|
|
|
+var imageminSvgo = require('imagemin-svgo');
|
|
|
|
|
|
var ImageOptimizer = function() {
|
|
|
|
|
@@ -34,7 +36,7 @@ var ImageOptimizer = function() {
|
|
|
return entry;
|
|
|
}
|
|
|
|
|
|
- var newFileSize = newFile.contents.length;
|
|
|
+ var newFileSize = newFile.length;
|
|
|
|
|
|
debug('JPEG lossless compression complete for %s', entry.url);
|
|
|
|
|
@@ -55,7 +57,7 @@ var ImageOptimizer = function() {
|
|
|
return entry;
|
|
|
}
|
|
|
|
|
|
- var newFileSize = newFile.contents.length;
|
|
|
+ var newFileSize = newFile.length;
|
|
|
|
|
|
debug('JPEG lossy compression complete for %s', entry.url);
|
|
|
|
|
@@ -90,7 +92,7 @@ var ImageOptimizer = function() {
|
|
|
return entry;
|
|
|
}
|
|
|
|
|
|
- var newFileSize = newFile.contents.length;
|
|
|
+ var newFileSize = newFile.length;
|
|
|
|
|
|
debug('PNG lossless compression complete for %s', entry.url);
|
|
|
|
|
@@ -124,12 +126,12 @@ var ImageOptimizer = function() {
|
|
|
return entry;
|
|
|
}
|
|
|
|
|
|
- var newFileSize = newFile.contents.length;
|
|
|
+ var newFileSize = newFile.length;
|
|
|
|
|
|
debug('SVG lossless compression complete for %s', entry.url);
|
|
|
|
|
|
if (gainIsEnough(fileSize, newFileSize)) {
|
|
|
- entry.weightCheck.bodyAfterOptimization = newFile.contents.toString();
|
|
|
+ entry.weightCheck.bodyAfterOptimization = newFile.toString();
|
|
|
entry.weightCheck.lossless = entry.weightCheck.optimized = newFileSize;
|
|
|
entry.weightCheck.isOptimized = false;
|
|
|
debug('Filesize is %d bytes smaller (-%d%)', fileSize - newFileSize, Math.round((fileSize - newFileSize) * 100 / fileSize));
|
|
@@ -194,35 +196,30 @@ var ImageOptimizer = function() {
|
|
|
|
|
|
var engine;
|
|
|
if (type === 'jpeg' && !lossy) {
|
|
|
- engine = Imagemin.jpegtran();
|
|
|
+ engine = imageminJpegtran({progressive: false});
|
|
|
} else if (type === 'jpeg' && lossy) {
|
|
|
- engine = jpegoptim({max: MAX_JPEG_QUALITY});
|
|
|
+ engine = imageminJpegoptim({progressive: false, max: MAX_JPEG_QUALITY});
|
|
|
} else if (type === 'png' && !lossy) {
|
|
|
- engine = Imagemin.optipng({optimizationLevel: OPTIPNG_COMPRESSION_LEVEL});
|
|
|
+ engine = imageminOptipng({optimizationLevel: OPTIPNG_COMPRESSION_LEVEL});
|
|
|
} else if (type === 'svg' && !lossy) {
|
|
|
- engine = Imagemin.svgo({ plugins: [ { removeUselessDefs: false } ] });
|
|
|
+ engine = imageminSvgo({ plugins: [ { removeUselessDefs: false } ] });
|
|
|
} else {
|
|
|
deferred.reject('No optimization engine found for imagemin');
|
|
|
}
|
|
|
|
|
|
- try {
|
|
|
-
|
|
|
- new Imagemin()
|
|
|
- .src(imageBody)
|
|
|
- .use(engine)
|
|
|
- .run(function (err, files) {
|
|
|
- if (err) {
|
|
|
- deferred.reject(err);
|
|
|
- } else {
|
|
|
- deferred.resolve(files[0]);
|
|
|
- var endTime = Date.now();
|
|
|
- debug('Optimization for %s took %d ms', type, endTime - startTime);
|
|
|
- }
|
|
|
- });
|
|
|
|
|
|
- } catch(err) {
|
|
|
- deferred.reject(err);
|
|
|
- }
|
|
|
+ imagemin.buffer(imageBody, {use: engine})
|
|
|
+
|
|
|
+ .then(function(file) {
|
|
|
+ var endTime = Date.now();
|
|
|
+ debug('Optimization for %s took %d ms', type, endTime - startTime);
|
|
|
+ deferred.resolve(file);
|
|
|
+ console.log('ET HOP');
|
|
|
+ })
|
|
|
+
|
|
|
+ .catch(function(err) {
|
|
|
+ deferred.reject(file);
|
|
|
+ });
|
|
|
|
|
|
return deferred.promise;
|
|
|
}
|