使用promises将多个svg字符串流式传输到nodejs中的png

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用promises将多个svg字符串流式传输到nodejs中的png相关的知识,希望对你有一定的参考价值。

我正在尝试将多个svg字符串转换为png,因此我可以使用nodejs中的PdfMake将它们渲染到pdf上。这适用于一个svg,但是当我添加多个svg字符串时,它们会被最后一个覆盖。使用此示例代码,它呈现两个png2图像(svg2)。

const promises = [svg1,svg2].map(str => {
    const stream = new Readable();
    stream.push(str);
    stream.push(null);
    return svgPromise(stream);
});

const result = await Promise.all(promises);

const png1 = result[0].content;
const png2 = result[1].content;

function svgPromise(stream) {
    return new Promise((resolve, reject) => {
    const svg = new Rsvg();
    stream.pipe(svg);
    svg.on("finish", function() {
      const buffer = svg.render({
          format: "png",
          width: width * 2,
          height: height * 2
      }).data;
      const png = datauri.format(".png", buffer);
      resolve(png);
    });
  });
}

不确定此错误是否与流或我的承诺逻辑有关。有任何想法吗?

依赖关系:

“librsvg”:“0.7.0”“pdfmake”:“0.1.35”“datauri”:“1.0.5”

答案

列出所有使用过的模块是值得的。假设您使用了datauri,似乎您需要为每个调用初始化一个新实例:

      svg.on("finish", function() {
          const datauri = new Datauri();
          const buffer = svg.render({
              format: "png",
              width: 16,
              height: 16
          }).data;
          const png = datauri.format(".png", buffer);
          resolve(png);
      });

以上是关于使用promises将多个svg字符串流式传输到nodejs中的png的主要内容,如果未能解决你的问题,请参考以下文章

使用 ffmpeg 从 C++ 内存中的多个图像流式传输 RTSP

是否可能:使用多个线程将输出流式传输到不同的文件/

将音频流式传输到多个 Web 浏览器

将音频流式传输到多个 AirPlay 设备

将多个 mp3 文件流式传输到 Icecast

Socket.io 没有流式传输到多个连接