将imagemagick blob保存到节点缓冲区

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将imagemagick blob保存到节点缓冲区相关的知识,希望对你有一定的参考价值。

我正在为节点编写一个imagemagick扩展,当我尝试将blob保存到缓冲区时,我得到了Segmentation故障。

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缺少什么?

答案

正如评论中所指出的,你需要告诉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构造函数可能更合适,或者在重新分配期间冒更多错误。

以上是关于将imagemagick blob保存到节点缓冲区的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Int16Array 缓冲区保存到 wav 文件节点 js

使用 Node Multer 缓冲区获取 Blob 并将 Blob 转换为 Base 64

使用 fetch、multer、express 将 blob 数据发送到节点

将 blob 从 JS 保存到 Oracle SQL?

如何将Java中的图片保存到多个blob中?

如何将 .xlsx 数据作为 blob 保存到文件