是否可以绘制多个SVG's到画布上
Is it possible to draw multiple SVG's to a canvas?
背景
我在一个文档中有一堆svg
(每个文档中都有rect
、path
等等),我需要将其绘制成一个可下载的PNG图像。我知道要做到这一点,有两种方法:要么将页面的HTML结构绘制到canvas
,然后从那里导出,要么将SVG及其内容直接渲染到canvas
上。
假设
第一个假设是,我试图使用html2canvas来呈现HTML结构,但只发现SVG根本无法通过HTML结构来呈现(由于安全问题)。第二个假设是,我试图通过canvg将SVG渲染到画布,结果发现它只允许渲染一个SVG元素,并且只渲染第一个元素。
结果
要证明第一个错误,请在此URL中键入http://www.w3schools.com/svg/tryit.asp?filename=trysvg_rect
并禁用Javascript。为了证明第二个是错的,我有一把小提琴要试。
问题
我想明确一点,我拥有多个svg
的理由是,我可以将它们放置在一个响应网格系统中,并通过纵横比调整大小。事不宜迟,我提出一个问题:如何将多个svg
元素渲染为一个canvas
如果该问题的答案是";这是不可能的";,那么接下来我的问题是:我应该呈现一个svg
,并用另一种方式处理响应性吗
您应该能够像绘制任何其他图像一样在画布上绘制SVG:
var img1 = document.createElement('img'),
img2 = document.createElement('img')
count = 2;
/// image loading is async, make sure they are loaded
img1.onload = img2.onload = function() {
count--;
if (count === 0) drawImages();
}
img1.src = 'some1.svg';
img2.src = 'some2.svg';
/// when loaded, draw them somewhere on the canvas
function drawImages() {
ctx.drawImage(img1, 0, 0);
ctx.drawImage(img2, someX, someY);
}
话虽如此,但有几个限制:
- FireFox当前不希望在SVG文件中未设置宽度和高度的情况下正确绘制图像
- 如果要将图像提取为位图(
toDataURL
/getImageData
),则应用CORS(跨原点资源共享)。如果没有,他们应该正常工作
相关文章:
- 使用onclick绘制SVG路径
- 如何在从javascript(Internet Explorer和Edge)更改后重新绘制SVG
- 使用JavaScript在线和终端绘制SVG
- 绘制 SVG 拉斐尔路径会出错并且不接受变量
- D3JS绘制SVG矩形和线条问题
- JavaScript - 有没有办法在内容下绘制SVG路径
- 如何在多个位置绘制svg,在另一个svg图像的顶部
- 使用Javascript绘制SVG
- 如何重新绘制svg和dosn'不要出现
- 有没有一种方法可以用Js绘制svg元素的轮廓
- 算法:用于将度数解析为x,y的函数,用于绘制SVG饼图
- 谷歌地图JavaScript v3 -绘制SVG线
- D3更新/重新绘制SVG设置间隔
- 在d3.svg.area().interpolate("basis")上绘制svg:圆
- 在树的顶部绘制SVG路径.无法更新路径
- 如何在视口中触发延迟线条绘制SVG动画
- 绘制SVG图像到画布显示空白
- d3 -缓慢绘制svg路径,线的末端消失
- ASP怎么能.Net UserControl在页面加载完成之前绘制svg
- 如何显式绘制svg视图框坐标