Попробуйте canvas2svg.js .[ Демо ]
Я сам нуждался в этом и закончил тем, что написал для этого библиотеку.В то время другие библиотеки были немного редкими или не генерировали действительный 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