原生SVG到画布或SVG到图像转换

时间:2014-02-15 01:12:46

标签: javascript canvas svg

我读了这个:Is there a way to convert SVG files to HTML5's canvas compatible commands?并尝试了谷歌。

是否有原生(跨浏览器)方式?浏览器在屏幕上显示SVG文档后,SVG文档在屏幕上显示为像素,将这些像素作为图像提供给用户是最简单的任务。

2 个答案:

答案 0 :(得分:1)

Paperjs是一个围绕画布的漂亮的小包装库,它有一个SVG import function

答案 1 :(得分:1)

This is now possible native.


来自MDN,

var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');

var data = '<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200">' +
           '<foreignObject width="100%" height="100%">' +
           '<div xmlns="http://www.w3.org/1999/xhtml" style="font-size:40px">' +
             '<em>I</em> like ' + 
             '<span style="color:white; text-shadow:0 0 2px blue;">' +
             'cheese</span>' +
           '</div>' +
           '</foreignObject>' +
           '</svg>';

var DOMURL = window.URL || window.webkitURL || window;

var img = new Image();
var svg = new Blob([data], {type: 'image/svg+xml'});
var url = DOMURL.createObjectURL(svg);

img.onload = function() {
  ctx.drawImage(img, 0, 0);
  DOMURL.revokeObjectURL(url);
}

img.src = url;

只需用自己的svg替换svg字符串即可。


PS。通过在画布上渲染和渲染为普通DOM,性能似乎要好得多! Perf for render to canvas似乎始终比<{3}}快 50倍(在Chrome,Safari和移动Chrome上测试过)。