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);
};

如何在此处获取源尺寸,以使我的调整大小目标动态?也许有一些graphicsmagick功能?

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 包页面的注释:

问题:使用输入流和任何“识别”操作(大小、格式等)时,如果您还需要在之后转换(write() 或 stream())图像,则必须传递“{bufferStream: true}”注意:这会缓冲内存中的 readStream!

于 2016-02-29T08:01:16.103 回答