Imagemagick解析s3图像进行调制

时间:2017-10-25 08:55:36

标签: node.js imagemagick aws-sdk

我正在运行一个快速应用程序,它正在处理一些图像数据。其中一项任务是调制遮罩区域。我正在使用gm模块的Imagemagick子类来解析和处理图像。当我使用本地文件demo.png和demo_mask.png时,调制可以正常工作,但是当我使用从s3存储桶下载的相同图像文件时,调制不起作用。

错误

  

Stream产生空缓冲区......

下载图片功能

myBucket.getObject({
  Key    : "correct_src_key",
},(err, downloadData) => {
  return downloadData;
});

代码

    var gm = require('gm').subClass({
      imageMagick: true
    });

    ...

    gm(demo_download_data.Body)
    .mask(demo_mask_download_data.Body)
    .modulate(...)
    .toBuffer("PNG",function(err, buffer){ ... })

调试程序demo_download_data属性:

  

AcceptRange ="字节" Body = Uint8Array [250830] ContentType =" JPG"   ConentLength = 250830 ETag = .... LastModified = ...

调试器demo_mask_download_data属性:

  

AcceptRange ="字节" Body = Uint8Array [5918] ContentType =" JPG"   ConentLength = 5918 ETag = .... LastModified = ...

我已经以某种方式将下载的图像数据转换为文件以便能够使用它。提前谢谢。

1 个答案:

答案 0 :(得分:0)

似乎.mask()有一个bug缓冲数据,所以我只允许使用像.mask('../ imgs / demo_mask.png')这样的本地文件路径。 现在我通过使用tmp模块创建s3蒙版图像的临时文件来解决这个问题。

现在解决了这个问题