将imagemagick Blob保存到节点缓冲区

时间:2018-09-12 15:57:23

标签: c++ node.js segmentation-fault magick++ node-addon

我正在为node编写imagemagick扩展,当我尝试将blob保存到缓冲区时,出现 Segmentation fault

using Magick::Blob;
using v8::MaybeLocal;
using v8::Object;

Isolate *isolate = args.GetIsolate();
NodeMagick *obj = ObjectWrap::Unwrap<NodeMagick>(args.Holder());

Blob blob;
obj->image.write(&blob);
MaybeLocal<Object> buffer = node::Buffer::New(isolate, (char *)blob.data(), node::encoding::UTF8);

如果我打印出Blob,我会得到一些数据,尽管不是全部...

printf((char*)blob.data());
// Displays:
// ëPNG

我不确定为什么会这样。我的数据没有完全保存到Blob吗?

如果我将obj->image.write(&blob);更改为obj->image.write("out.png");并删除buffer = ...,则文件创建并可见,那么Blob在这里我会丢失什么?

1 个答案:

答案 0 :(得分:1)

正如评论中指出的那样,您需要告诉Node的Buffer Blob大小有多大。

 Blob blob;
 obj->image.write(&blob)
 MaybeLocal<Object> buffer = node::Buffer::Copy(isolate,
                                                (char *)blob.data(),
                                                blob.length());

查看node_buffer.h文件,使用node::Buffer::Copy构造函数可能更合适,否则在释放过程中可能会有其他错误。