我想使用gulp和imagemagick批量调整图像大小。因为我找不到imagemagick的当前gulp包装,所以我决定只通过exec
在gulp中运行imagemagick。像这样:gulp:exec连续执行多个命令
gulp.task('images-large', function (cb) {
exec('mogrify -path .\\images\\large -scale "1920x1080^" -gravity north -crop 1920x1080+0+0 .\\raw_images\\*.*', function (err, stdout, stderr) {
console.log(stdout);
console.log(stderr);
cb(err);
});
});
gulp.task('images-medium', function (cb) {
exec('mogrify -path .\\images\\medium -scale "960x450^" -gravity north -crop 960x450+0+0 .\\raw_images\\*.*', function (err, stdout, stderr) {
console.log(stdout);
console.log(stderr);
cb(err);
});
});
上述TAKS的两个独立时运行做工精细,。各种大小的图像进入,回来制服。现在出现了这个问题。如果我结合了两个类似的任务:
gulp.task('image', [
'image-large',
'image-medium'
]);
然后,大图像和中图像出来的随机大小。我猜Imagemagick不喜欢同时运行多个mogrify
命令。也许是因为它实际上会暂时修改原始图像?这对我来说是个谜。
而不是与imagemagick(通常是一个失败的命题)斗争,我宁愿只是运行我的图像变换串行,大,然后中等。有没有办法在gulp中运行串口exec()
命令?也就是说,等待一位执行官完成之后再运行下一个?
我想是这样的:
gulp.task('images-medium', ['images-large'], function (cb) {...});
可悲的是,图像仍然随机大小。
B计划是将imagemagick的东西移动到一个节点脚本,然后从gulp运行节点脚本,但是这是接近Rube Goldberg的领土,我不确定这是我的最佳选择。
不太可能,有什么我可以做imagemagick行为?
这没有奏效,可悲。图片仍然有随机大小。据猜测,只要吞咽完成并且不会在imagemagick上等待,回调就会发生。我很高兴知道'run-sequence'存在。 – crowhill
嗯。当你分开运行它们并且它们工作时,即使吞咽任务认为它完成了,是否还有一些东西(如'mogrify')在后台运行?您可以在“run-sequence”任务之间添加某种超时,以排除一些奇怪的异步问题(我不建议永久保留它,但可能有助于排除故障)。 – dvlsg
这当然是一个异步问题。我可以在创建文件时观看这些文件,并且中等图像与大图像交错(与运行序列没有区别)。我认为我期待吞咽成为它不是的东西。 – crowhill