尝试
canvas2svg.js. [
Demo]
我自己遇到了这个需要,最终为此写了一个图书馆.当时其他的图书馆有点稀疏,或者没有生成有效的SVG.
基本概念是一样的.您创建一个模拟画布2D上下文,然后在调用画布绘图命令时生成一个SVG场景图.基本上你可以重复使用相同的绘图功能.根据您传递给它的上下文,您可以绘制到标准2D画布或生成可序列化的SVG文档.
您实际上不能“转换”一个被绘制的画布元素,因为它只是一个位图,所以请记住.当您导出到SVG时,您只需使用假的上下文再次调用相同的绘图功能.
所以作为一个快速的例子:
//create a canvas2svg mock context
var myMockContext = new C2S(500,500); //pass in your desired SVG document width/height
var draw = function(ctx) {
//do your normal drawing
ctx.fillRect(0,0,200,200);
//etc...
}
draw(myMockContext);
myMockContext.getSerializedSvg(); //returns the serialized SVG document
myMockContext.getSvg(); //inline svg