我正在尝试使用 GM https://github.com/aheckmann/gm设置一个转换流以通过管道传输图像。所以我可以做类似的事情:
readStream.pipe(resize()).pipe(writeStream);
我已经使用 through2 和 gm 来尝试实现这一目标。它可以工作,但只解析一半的图像,留下很大一部分只是灰色。
'use strict';
var fs = require('fs')
, gm = require('gm').subClass({imageMagick: true})
, through2 = require('through2');
let readStream = fs.createReadStream('landscape.jpg');
let writeStream = fs.createWriteStream('landscape-out.jpg');
let resize = function(width, height) {
return through2(function(chunk, enc, callback){
gm(chunk)
.resize(800)
.gravity('Center')
.crop(800, 500, 0, 0)
.stream((err, stdout, stderr) => {
stdout.on('data', chunk => {
this.push(chunk);
});
stdout.on('end', () => {
callback();
});
});
});
}
readStream.pipe(resize()).pipe(writeStream);