从内存 ImageMagick 解码 svg

Decode svg from memory ImageMagick

如何从缓冲区解码 svg 图像?我知道 SVG 只是文本,但除了从磁盘读取之外,我不知道如何将它们解析为 Magick::Image。

#include <Magick++.h>
#include <stdio.h>
using namespace Magick;

int main() {
    printf("EnableOpenCL ret: %d\n", Magick::EnableOpenCL());
    Magick::Image svgImage;
    svgImage.read("input.svg"); // first read file
    svgImage.magick("png"); // then specify PNG format
    svgImage.write("output.png");
    return 0;
}

您可以将缓冲区复制到 Magick++ 的 Magick::Blob 并将其传递给 Magick::Image 构造函数。

Magick::Blob svgData(memory_ptr, memory_length);
Magick::Image svgImage(svgData, svgRenderSize, "SVG");

其中memory_ptr是svg数据在内存中的地址,memory_lengthmemory_ptr的总字节大小,svgRenderSizeMagick::Geometry实例图像大小。