0
我需要從另一個做出兩個調整大小的圖像。nodejs gm使用流兩次
var fs = require('fs')
, gm = require('gm')
, async = require('async');
var worker = function(filename) {
img = gm(fs.createReadStream(filename));
img.flip();
this.run = function() {
async.series([
function(callback) {
img.resize(640, 480);
img.toBuffer(function(err, buffer) {
if (err) {
callback(err);
return;
}
callback(null, true);
})
},
function(callback) {
img.resize(320, 240);
img.toBuffer(function(err, buffer) {
if (err) {
callback(err);
return;
}
callback(null, true);
})
},
],
function(err, results) {
console.log(err, results);
});
};
}
new worker('test.jpg').run();
此代碼生成錯誤:
Error: gm().stream() or gm().write() with a non-readable stream.
如果我有一個文件名替換fs.createReadStream高於一切工作就好了。它看起來像gm不會將來自流的源圖像存儲在它的內部緩衝區中。這是一個錯誤還是我應該知道一些關於正確使用它的其他信息?
注意:使用異步是因爲在實際項目中,我需要兩個結果來執行其他操作。
你爲什麼要使用流呢? – robertklep
我已經沒有使用它,但它需要考慮將數據從流中複製到緩衝區,使代碼更大。無論如何,如果gm庫允許編寫gm(stream).resize(...).stream(callback).resize(...).stream(callback),它應該以類似的方式處理流和文件而沒有解決方法。 – Lisio