【发布时间】:2021-04-02 07:24:34
【问题描述】:
我一直在尝试从 DataURL 中创建图像(使用 window.Image 类)。此 DataURL 包含一个 svg 标记和一个 foreignObject。但它只是保持完全空。
我也尝试在画布上绘制此图像,但我认为这不是问题,因为我什至无法获得正确外观的图像。
完成的数据URL
data:image/svg+xml;charset=utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22200%22%20height%3D%22200%22%3E%3CforeignObject%20width%3D%22100%25%22%20height%3D%22100%25%22%3E%3Cdiv%20style%3D%22background-color%3Ared%22%3Etest%3C%2Fdiv%3E%3C%2FforeignObject%3E%3C%2Fsvg%3E
模板化的 SVG 标记
注意:ReactJS 组件 (<Component />) 被解析为字符串。但它不包含任何样式,它只是一个简单的 div,其中包含一些文本。
const svg = `<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200"><foreignObject width="100%" height="100%">${renderToStaticMarkup(
<Component />
)}</foreignObject></svg>`;
模板化的 DataURL
const url = `data:image/svg+xml;charset=utf8,${encodeURIComponent(svg)}`;
加载图片
const image = new window.Image(url);
image.src = url;
图像到画布
const ctx = canvas.getContext("2d");
const image = await loadImage(url) // a simple wrapper function which waits for the image to load that returns a promise
ctx.drawImage(image, 0, 0);
【问题讨论】:
标签: javascript html css reactjs svg