2017-10-27 12 views
2

webshotモジュールのイメージスクリーンショットのサイズを、ディスクに触れることなくメモリ内ですべて行います。ここでconcatバッファまたは別の方法

dataはチャンクでのお届けとなりますので、私は、私はバッファを組み合わせて、終わりにし

var webshot = require('webshot'); 
var fs  = require('fs'); 
var sharp = require('sharp'); 

alldata = new Buffer(1024*1024); 

var options= { 
windowSize: { 
    width: 1024 
    , height: 768 
}, 
zoomFactor:0.25, 
renderDelay:500, 
quality:50, 
phantomConfig: {'ignore-ssl-errors': 'true'} 
}; 

var file = fs.createWriteStream('google.png', {encoding: 'binary'}); 
var renderStream = webshot('google.com', options); 

var completed = false; 

renderStream.on('data', function(data) { 
    console.log(Type(data)); 
    alldata.write(data); 
}); 

renderStream.on('end', function(data) { 
    completed=true; 
}); 

require('deasync').loopWhile(function(){return !completed;}); 

必要になったものですSharpを使用して、別のサイズにイメージを変換します。

var resizeTransform = sharp(thebuffer).resize(320, 270).max(); 

しかし、私はちょうどバッファを連結することはできませんし、バッファを連結せずにSharpで直接行う方法はわかりません。任意のアイデアを正しく行う方法?

答えて

1

pipeを使用して画像のサイズを変更できます。

var webshot = require('webshot'); 
var fs = require('fs'); 
var sharp = require('sharp'); 

var options = { 
    windowSize: { 
     width: 1024, 
     height: 768 
    }, 
    zoomFactor: 0.25, 
    renderDelay: 500, 
    quality: 50, 
    phantomConfig: { 'ignore-ssl-errors': 'true' } 
}; 

var file = fs.createWriteStream('google.png', { encoding: 'binary' }); 
var renderStream = webshot('google.com', options); 
const resizeStream = sharp().resize(320, 270).png(); 
//pipe your stream, get the webshot, resize it, then save to png 
renderStream.pipe(resizeStream).pipe(file); 
//since res is a writable stream, you can pipe the stream down to it just like the file stream. 
//renderStream.pipe(resizeStream).pipe(res); 
+0

ありがとうございました。ファイルに書きたくない場合はどうすればよいですか。単にストリーム/メモリに保存しておき、res.writeを通して出力します。 – xcodejs

+0

'res'は書き込み可能なストリームなので、書き込み可能なファイルストリームと同様にストリームを' res'にパイプすることもできます。 – ufxmeng

関連する問題