0

我有一个 Node.js 应用程序。在这个应用程序中,我使用这个 API从 Azure 存储加载一个图像文件。具体来说,我正在使用该createReadStream功能。该函数提供了一个从图像中读取的流。现在,我的代码如下所示:

let chunks = [];
let sharp = require('sharp');

let fileStream = this.fileService.createReadStream('[MY_SHARE]', '[MY_DIRECTORY]', '[MY_PICTURE_NAME]', (err, fileResult, res) => {
  console.log('Sharpening image...');
  console.log(imageChunks);

  sharp(chunks).resize(100, 100).toFile('resized.png', function(err1, info) {
    if (err1) {
      console.log('oops');
    }
  });
});

fileStream.on('data', function(chunk) {
  chunks.push(chunk);
});

在此块中,请注意我正在尝试使用Sharp 节点模块。在行之前sharp(chunks)...,我将图像块打印到控制台。在控制台中打印时,我看到以下内容:

[ <Buffer 87 52 4e 47 0d 0a 1a 0a 01 02 04 0d 49 48 44 52 00 00 06 18 00 00 06 0f 08 06 00 00 00 75 c2 f0 a2 00 00 00 04 67 42 4d 41 00 00 b2 8f 0a fc 61 05 00 ... > ]

但是,当我打电话给 Sharp 时,我收到一条错误消息:

Error: Unsupported input object

根据文档,Sharp 构造函数允许使用字符串或缓冲区。看看上面打印到控制台的内容,看起来我正在将缓冲区传递给 Sharp。我是不是误会了什么?如果是这样,是什么?

4

1 回答 1

1

请更改以下代码行:

  sharp(chunks).resize(100, 100).toFile('resized.png', function(err1, info) {
    if (err1) {
      console.log('oops');
    }
  });

sharp(Buffer.concat(chunks)).resize(100, 100).toFile('resized.png', function(err1, info) {
    if (err1) {
    console.log('oops');
    console.log(err1);
    }
});

那应该可以解决问题。如果我没记错的话,chunks实际上是一个数组,Buffersharp库需要一个Buffer,所以我们需要使用所有数组元素创建一个新缓冲区。

于 2017-06-26T14:18:20.793 回答