9

SailsJS (ベータ版) を使用しています。Graphicsmagick を使用して、SailsJS-beta で Skipper によって解析されたストリームを取得して、 Skipper-function を呼び出す前に画像のサイズを変更する方法を見つけようとしていますreq.file('inputName').upload()

私の目標は、大きな元の画像をアップロードする前にサイズを変更することです。Sails ベータ版では、文書化が不十分な Skipper-file-parser が導入されました (少なくとも私は理解できません)。アップロードする前に画像のサイズを変更する方法を理解してください。

これは機能します(コントローラーアクションのコード):

req.file('fileName').upload('storedImage.png', function(err, files){
  // File is now uploaded to storedImage.png
});

私が欲しいのは次のようなものです:

// Read the file stream into a file upload
var stream = req.file('fileName');

gm(stream).resize(200, 200).write('storedImage.png', function(err){
  // File is now resized to 200x200 px and uploaded to storedImage.png
});

req.file('fileName')私の問題は次のとおりです。ストリームを適切にフェッチして gm に送信するにはどうすればよいですか?

4

2 に答える 2

13

これはあなたのために働くはずです:

var Writable = require('stream').Writable;
var resize = require('image-resize-stream')(100); // Or any other resizer

// The output stream to pipe to
var output = require('fs').createWriteStream('storedImage.png');

// Let's create a custom receiver
var receiver = new Writable({objectMode: true});
receiver._write = function(file, enc, cb) {
  file.pipe(resize).pipe(output);

  cb();
};

アクションでは、レシーバーを使用するだけです。

req.file('fileName').upload(receiver, function(err, files){
  // File is now resized to 100px width and uploaded to ./storedImage.png
});

Skipper の API は大幅に変更される気がしますが、今のところ (v0.1.x で) 動作します。

アップデート

具体的には、gmサイズ変更に使用する場合は次のようになります。

var gm = require('gm');
var Writable = require('stream').Writable;

// The output stream to pipe to
var output = require('fs').createWriteStream('storedImage.png');

// Let's create a custom receiver
var receiver = new Writable({objectMode: true});
receiver._write = function(file, enc, cb) {
  gm(file).resize('200', '200').stream().pipe(output);

  cb();
};
于 2014-06-12T16:40:16.607 に答える