1

Meteor CollectionFS でアップロード時に画像のサイズを変更したいと考えています。しかし、画像のサイズに基づいてサイズを変更したいと思います。たとえば、1000x500 の画像のサイズを 1024x512 に変更したいのですが、60x100 を 64x128 に変更したいのですが、そのためにはソースのサイズを知る必要があります。

CollectionFSのドキュメントで提供されているコードに基づいてコードを作成しています。

var createThumb = function(fileObj, readStream, writeStream) {
  // Transform the image into a 10x10px thumbnail
  gm(readStream, fileObj.name()).resize('10', '10').stream().pipe(writeStream);
};

サイズ変更ターゲットを動的にするために、ここでソース ディメンションを取得するにはどうすればよいですか? 多分いくつかのグラフィックスマジック機能がありますか?

4

1 に答える 1

2

画像のサイズ (寸法) を返す非同期の GraphicsMagick 関数があります。

gm(readStream).size({ bufferStream: true }, function(err, value) {
    var w = 100, h = 100;

    //modify logic here to set the desired output width/height, based on the source width/height
    if (value.width == 60 && value.height == 100) {
         w = 64;
         h = 128;
    }

    //"this" is the gm context, so you can chain gm functions to "this" inside the size callback.
    this.resize(w, h).stream().pipe(writeStream);
});

gmこれに関するGithubのnpmパッケージページからのメモ:

GOTCHA: 入力ストリームと「識別」操作 (サイズ、フォーマットなど) を操作する場合、後で画像を変換 (write() または stream()) する必要がある場合は、「{bufferStream: true}」を渡す必要があります。 : これは readStream をメモリにバッファリングします!

于 2016-02-29T08:01:16.103 に答える