Сохранить изображение в виде большого блога в буфер узла - PullRequest
0 голосов
/ 12 сентября 2018

Я пишу расширение imagemagick для узла, и когда я пытаюсь сохранить BLOB-объект в буфер, я получаю Ошибка сегментации .

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 голосов
/ 13 сентября 2018

Как указано в комментариях, вы должны указать Node's 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 или рисковать дополнительными сбоями во время освобождения.

...