将<svg> HTML5保存为PNG或图像</svg>

时间:2013-01-31 17:14:24

标签: html5 svg export

我有使用D3 Javascript库生成的图表,我需要将它们保存到文件PNG或SVG。

是否有一些图书馆可以完成这项工作?

我发现这个https://github.com/sampumon/SVG.toDataURL但是我的html5没有工作, 在firefox控制台中我遇到了这个错误:

NS_ERROR_NOT_AVAILABLE:组件不可用 [Interrompi per questo errore]

ctx.drawImage(img,0,0);

3 个答案:

答案 0 :(得分:3)

developer.mozilla.org演示如何使用canvas元素将svg导出到png的示例。

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);
  var png_img = canvas.toDataURL("image/png");
}

img.src = url;

答案 1 :(得分:1)

服务器端脚本方法

这是一个将svg元素保存到png的简单方法(尽管它使用服务器端脚本,可能与您期望的不同): 结帐this page

正如作者所记录的那样,客户端提取svg元素(使用XMLSerializer.serializeToString)并将其发送到服务器;服务器将其转换为png并将其发送回客户端。服务器可以使用任何方便的程序(在这种情况下为rsvg-convert)。

Canvg库

您可以使用此库在客户端(check it out!)执行此操作:

  

canvg是一个SVG解析器和渲染器。它需要一个SVG文件的URL或SVG文件的文本,用JavaScript解析它,并在Canvas元素上呈现结果

像这样使用:

//load a svg snippet in the canvas with id = 'drawingArea'
canvg(document.getElementById('drawingArea'), '<svg>... </svg>')

然后你可以使用toDataURL方法: document.getElementById('drawingArea').toDataURL('image/png');

答案 2 :(得分:0)

此扩展程序可与页面中的所有<svg>标签一起使用:https://chrome.google.com/webstore/detail/svg-export/naeaaedieihlkmdajjefioajbbdbdjgp?hl=en-GB