首页 文章

使用Gulp-imagemin和imagemin-jpeg-recompress插件?

提问于
浏览
3

我只是尝试使用Gulp来简化图像优化 . 我发现imagemin-jpeg-recompressgulp-imagemin附带的默认优化器减少了JPG . 我想知道是否有办法使用 gulp-imagemin 但是为 imagemin-jpeg-recompress 换掉 jpegtran 插件 .

我似乎无法找到任何关于这可能如何协同工作的详细文档 .

2 回答

  • 4

    我_1354406这是一个简单的过程 . 只需 require 插件(在这种情况下,我想使用 imagemin-jpeg-recompress 插件) . 然后通过 imageminuse 属性指定要在 imagemin 内使用的插件 . 我相信这会覆盖 imagemin 附带的捆绑 jpegtran 优化器 .

    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

    在gulp-imagemin的新版本(3.x)中,上述解决方案不起作用 . 原因是他们改变了如何声明插件并将其配置为数组语法和范围参数 .

    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

相关问题