gpt4 book ai didi

gulp - gulp-image-resize生成多个输出大小

转载 作者:行者123 更新时间:2023-12-04 13:48:07 24 4
gpt4 key购买 nike

我想使用gulp生成一堆不同的图像大小并同时优化它们。我认为有两种方法可以解决此问题:

首先是您可以为每个大小创建n个不同的任务,然后创建一个主任务,该主任务调用每个调整大小任务。主任务可能类似于:

gulp.task('resize_images',['resize_100','resize_300','resize_800','resize_1000']);


这看起来还可以,而且您会获得很好的并行化,但是每个任务都有很多重复的代码,这意味着如果大小列表变得足够大,则维护它可能是一场噩梦。

我的另一个想法是创建一个任务,但是在其中使用for循环遍历每个大小。像这样:

var gulp = require('gulp');
var imageminWebp = require('imagemin-webp');
var imageResize = require('gulp-image-resize');
var notify = require('gulp-notify');
var os = require('os');
var parallel = require('concurrent-transform');
var pipes = require('gulp-pipes');

gulp.task('resize_images', function() {

var sizes = [100,300,800,1000,2000];
var stream;

for (size in sizes) {
stream = gulp.src('images/master/**/*.{jpg,png,tiff}')
.pipe(parallel(
imageResize({
width: sizes[size],
height: sizes[size],
upscale: false
}),
os.cpus().length
))
.pipe(pipes.image.optimize())
.pipe(gulp.dest('images/derivative/' + sizes[size] + '/'))
.pipe(imageminWebp({quality: 75})())
.pipe(gulp.dest('images/derivative/' + sizes[size] + '/'))
}
return stream;
});


这似乎还可以,但是由于某种原因并没有感到大吃一惊。例如,通知与上述解决方案很奇怪-我想通知每个大小处理完成时,我可以通过单个主任务免费获得。有没有更好的方法来完成我要做的事情?

最佳答案

请记住:Gulp只是JavaScript。

gulp.task没什么神奇的。您不必将所有内容放在任务内的Gulpfile中。任务仅仅是功能。

您可以利用这一事实,并根据某些参数动态生成一堆任务,因此不会在各处产生重复的代码。在您的情况下,您可以为要创建的每个图像大小生成一个任务:

var resizeImageTasks = [];

[100,300,800,1000,2000].forEach(function(size) {
var resizeImageTask = 'resize_' + size;
gulp.task(resizeImageTask, function() {
return gulp.src('images/master/**/*.{jpg,png,tiff}')
.pipe(imageResize({
width: size,
height: size,
upscale: false
}))
.pipe(pipes.image.optimize())
.pipe(gulp.dest('images/derivative/' + size + '/'))
.pipe(imageminWebp({quality: 75})())
.pipe(gulp.dest('images/derivative/' + size + '/'))
});
resizeImageTasks.push(resizeImageTask);
});

gulp.task('resize_images', resizeImageTasks);

关于gulp - gulp-image-resize生成多个输出大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35801807/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com