2015-06-19 3 views
3

Я просто экспериментирую с Gulp, чтобы просто оптимизировать изображения. Я считаю, что imagemin-jpeg-recompress уменьшает JPG больше, чем оптимизатор по умолчанию, который поставляется с gulp-imagemin. Мне интересно, есть ли способ использовать gulp-imagemin, но замените плагин jpegtran на imagemin-jpeg-recompress.Используйте Gulp-imagemin с плагином imagemin-jpeg-recompress?

Я не могу найти подробные документы о том, как это может работать вместе.

ответ

4

Я собираюсь ответить на свой вопрос. Я могу ошибаться, но, похоже, это простой процесс. Просто require плагин (в этом случае я хочу использовать плагин imagemin-jpeg-recompress). Затем укажите плагин для использования в пределах imagemin через свойство useimagemin. Я считаю, что это переопределит оптимизатор jpegtran, который поставляется с imagemin.

var gulp = require('gulp'); 
var imagemin = require('gulp-imagemin'); 
var imageminJpegRecompress = require('imagemin-jpeg-recompress'); 

gulp.task('optimize', function() { 
    return gulp.src('src/images/*') 
    .pipe(imagemin({ 
     use:[imageminJpegRecompress({ 
     loops:4, 
     min: 50, 
     max: 95, 
     quality:'high' 
     })] 
    })) 
}); 
4

В новых версиях (3.x) gulp-imagemin решение выше не работает. Причина в том, что они изменили, как плагины объявлены и настроены на синтаксис массива и аргументы с диапазоном.

Изменение API является documented in Release 3.0.0

gulp.task('default',() => { 
    return gulp.src('src/images/*') 
-  .pipe(imagemin({ 
-   interlaced: true, 
-   progressive: true, 
-   optimizationLevel: 5, 
-   svgoPlugins: [{removeViewBox: false}] 
-  })) 
+  .pipe(imagemin([ 
+   imagemin.gifsicle({interlaced: true}), 
+   imagemin.mozjpeg({progressive: true}), 
+   imagemin.optipng({optimizationLevel: 5}), 
+   imagemin.svgo({plugins: [{removeViewBox: false}]}) 
+  ])) 
     .pipe(gulp.dest('dist/images')); 
}); 

отмечая, что также «если вы передаете в массив плагинов вам необходимо явно передать в каждый плагин вы хотите, а не только те, которые вы хотите изменить параметры для. "

Новые версии imagemin-jpeg-recompress (5.x) следуют этому API.

Собираем все вместе, с помощью плагинов по умолчанию (кроме jpegtran, которые мы отменяют с Jpeg-Recompress), ответ выше, может быть в следующем формате:

var gulp = require('gulp'); 
var imagemin = require('gulp-imagemin'); 
var imageminJpegRecompress = require('imagemin-jpeg-recompress'); 

gulp.task('optimize', function() { 
    return gulp.src('src/images/*') 
    .pipe(imagemin([ 
     imagemin.gifsicle(), 
     imageminJpegRecompress({ 
     loops:4, 
     min: 50, 
     max: 95, 
     quality:'high' 
     }), 
     imagemin.optipng(), 
     imagemin.svgo() 
    ])) 
}); 

Relevant discussion on gulp-imagemin github issue tracker

+0

Спасибо за ссылки примечания к выпуску. Я пропустил это изменение еще в мае и не получил новый синтаксис после часа поиска. – joemaller

+0

Да, спасибо! Я искал часы на этом, я подтверждаю, что последний работал идеально. – CodeUK