有没有一个好的库能够将SVG转换为HTML画布并支持font元素?我已经尝试过canvg,但它不支持Font。
支持 HTML5 Canvas 的浏览器也很好地支持 SVG。因此,您可以这样做:
var img = new Image;
img.onload = function(){ myCanvasContext.drawImage(img,0,0); };
img.src = "foo.svg";
这种技术的唯一缺点是,如果SVG位于你的域之外,那么canvas将变得污染;如果这是你的目标,那么你将无法使用getImageData()
读取结果。 我在我的服务器上放了一个此技术的示例:http://phrogz.net/tmp/canvas_from_svg.html。 我已经测试并验证它可以在IE9、Chrome v11b、Safari v5和Firefox v4上正常工作(并且看起来相同)。
[编辑]请注意:
Chrome和Firefox目前在安全方面“放弃”并禁止您在将任何SVG绘制到画布上后从画布中读取它们(例如 这些问题已经被解决了getImageData()
或toDataURL()
),而不考虑域(无论如何都不能)。
Firefox目前存在一个错误,除非指定SVG的height
和width
属性,否则它将拒绝将SVG绘制到画布上。
img.src = "data:image/svg+xml,"+svgString;
Chrome 可以正常工作,但 Firefox 拒绝解析 svgString
变量,因为我嵌入了 CDATA 样式。
更新:通过使用 encodeURIComponent(svgString)
已经解决了这个问题。 - arunkjn如果您将svg嵌入HTML或作为原始源,则可以使用数据URL将svg转换为HTML图像元素,然后可以在画布上绘制:
var img = new Image();
// here attach an onload handler that draws the image on the canvas
// svgSource is the raw svg xml
img.src = "data:image/svg+xml," + encodeURIComponent(svgSource);
我刚刚尝试了一个简单的img标签,Phrogs'方法和canvg。我的SVG文件中嵌入了PNG图像。只有canvg可以正常显示,其他方法都无法显示嵌入的PNG图像。这是在Android Jellybean上使用标准浏览器或Chrome浏览器测试的。