多次调整一个图像的大小

时间:2017-04-30 08:32:27

标签: node.js sharp

我正在调整给定图像(保存在磁盘上)以调整不同尺寸:

var image = 'photos/pic';
var sizes = [1440, 1080, 720, 480];

for (var i = 0; i < sizes.length; i++) {
    sharp(image + '.jpg')
    .resize(sizes[i], sizes[i])
    .toFile(image + '-' + sizes[i] + '.jpg');       
}

这可以按预期工作,但我想还有改进的余地。

  • for-loop会导致任何问题吗?如果是,是否有更好的方法 解决这个问题?
  • 等待生成的图片调整大小并将其用于下一个调整大小过程会更快吗?让我们说原始图片是2000x2000。如果有的话,从720x720调整为480x480而不是2000x2000调整为480x480的速度有何提高?考虑到我必须首先阅读720x720文件并等待调整大小完成。
  • 我应该在&#34; main&#34;节点线程或fork一个子进程?它们是异步运行的,对吗?

2 个答案:

答案 0 :(得分:0)

你可以使用蓝鸟承诺

来做到这一点
const Promise = require('bluebird');
global.Promise = Promise;


var sizes = [{
path: 'large',
xy: 800
},{
    path: 'medium',
    xy: 300
},{
    path: 'small',
    xy: 100
}];
Promise.map(sizes, function(size) {
    return sharp( img.buffer )
        .resize( size.xy, size.xy )
        .toFile( size.path );
});

src: - https://github.com/lovell/sharp/issues/154

我试过了,它正在100%工作

答案 1 :(得分:-1)

您可以使用Sharp JS的Clone方法

http://sharp.dimens.io/en/stable/api-input/#clone

该示例为您提供所需的一切

// Create the baseline changes
const pipeline = sharp().rotate();

pipeline.clone().resize(800, 600).pipe(firstWritableStream);
pipeline.clone().extract({ left: 20, top: 20, width: 100, height: 100 
  }).pipe(secondWritableStream);

readableStream.pipe(pipeline);

也可以将此用于承诺