使用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的主要内容,如果未能解决你的问题,请参考以下文章