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

3
我只是在尝试使用Gulp简单地优化图像。我发现,与gulp-imagemin默认的优化器相比,imagemin-jpeg-recompress可以更好地减小JPG文件大小。我想知道是否有一种方法可以使用gulp-imagemin,并将其中的jpegtran插件替换为imagemin-jpeg-recompress
我似乎找不到任何关于如何使它们共同工作的详细文档。
2个回答

4
我将回答我自己的问题。虽然我可能错了,但这似乎是一个简单的过程。只需require插件(在这种情况下,我想使用imagemin-jpeg-recompress插件)。然后通过imageminuse属性指定要使用的插件。我认为这会覆盖随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 更改在“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()
    ]))
});

gulp-imagemin github问题跟踪器上的相关讨论


感谢您提供发布说明的链接。我错过了五月份的更改,在搜索了一个小时后也没有找到新的语法。 - joemaller
是的,谢谢!我已经搜索了几个小时了,我确认后者完美地工作了。 - CodeUK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接