是否有将SVG文件绘制到HTML5画布上的默认方式?谷歌浏览器支持将SVG加载为图像(并简单地使用drawImage
),但开发人员控制台确实警告过resource interpreted as image but transferred with MIME type image/svg+xml
.
我知道有可能将SVG转换为canvas命令(比如这个问题),但我希望不需要.我不关心旧的浏览器(所以如果FireFox 4和IE 9支持某些东西,那就足够了).
您现在可以使用在某些但不是所有浏览器中ctx.drawImage
绘制具有.svg源的HTMLImageElements .Chrome,IE11和Safari工作,Firefox可以处理一些错误(但每晚修复它们).
var img = new Image(); img.onload = function() { ctx.drawImage(img, 0, 0); } img.src = "http://upload.wikimedia.org/wikipedia/commons/d/d2/Svg_example_square.svg";
这里有实例.你应该在画布上看到一个绿色方块.页面上的第二个绿色方块是插入DOM中的相同元素以供参考.
您还可以使用新的Path2D对象绘制SVG(字符串)路径(仅适用于Chrome).换句话说,你可以写:
var path = new Path2D('M 100,100 h 50 v 50 h 50'); ctx.stroke(path);
这里的实例.
没有任何本机允许您在画布中本机使用SVG路径.您必须转换自己或使用库为您完成.
我建议你去看看canvg:
http://code.google.com/p/canvg/
http://canvg.googlecode.com/svn/trunk/examples/index.htm
您可以svg
通过以下方式在画布上轻松绘制简单的s:
将svg的源分配为base64格式的图像
将图像绘制到画布上
注意:该方法唯一的反向是它无法绘制嵌入的图像svg
.(见演示)
(请注意,嵌入的图像仅在其中可见svg
)
var svg = document.querySelector('svg');
var img = document.querySelector('img');
var canvas = document.querySelector('canvas');
// get svg data
var xml = new XMLSerializer().serializeToString(svg);
// make it base64
var svg64 = btoa(xml);
var b64Start = 'data:image/svg+xml;base64,';
// prepend a "header"
var image64 = b64Start + svg64;
// set it as the source of the img element
img.src = image64;
// draw the image onto the canvas
canvas.getContext('2d').drawImage(img, 0, 0);
svg, img, canvas {
display: block;
}
SVG
IMAGE
CANVAS
对不起,我没有足够的声誉评论@Matyas答案,但如果svg的图像也在base64中,它将被绘制到输出.
var svg = document.querySelector('svg');
var img = document.querySelector('img');
var canvas = document.querySelector('canvas');
// get svg data
var xml = new XMLSerializer().serializeToString(svg);
// make it base64
var svg64 = btoa(xml);
var b64Start = 'data:image/svg+xml;base64,';
// prepend a "header"
var image64 = b64Start + svg64;
// set it as the source of the img element
img.onload = function() {
// draw the image onto the canvas
canvas.getContext('2d').drawImage(img, 0, 0);
}
img.src = image64;
svg, img, canvas {
display: block;
}
SVG
IMAGE
CANVAS
Mozilla有一种在画布上绘制SVG的简单方法,称为"将DOM对象绘制到画布中 "
正如Simon所说,使用drawImage应该行不通。但是,使用canvg库和:
var c = document.getElementById('canvas'); var ctx = c.getContext('2d'); ctx.drawSvg(SVG_XML_OR_PATH_TO_SVG, dx, dy, dw, dh);
这来自Simon上面提供的链接,其中包含许多其他建议,并指出您要链接到或下载canvg.js和rgbcolor.js。这些允许您通过URL或在JavaScript函数中使用svg标签之间的内联SVG代码来操纵和加载SVG。