将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