2016-02-13 99 views
1

我正在研究d3.js图表​​。我有我想用PNG格式打印的雷达图表,但是当我做转换时,它什么也没有显示,当我保存图像时它保存但全黑或者一段时间给出错误JavaScript中的SVG转换为PNG

我用了两种方法 1.用简单的代码对谷歌所发现

var $container = $('#chart'); 

    content = $container.html().trim(); 
    canvas = document.getElementById('svg-canvas'); 

// Draw svg on canvas 
    canvg(canvas, content); 

// Change img be SVG representation 
    var theImage = canvas.toDataURL('image/png'); 
    $('#svg-img').attr('src', theImage); 

在此使用Canvg库,但它显示什么和第二种方法是

saveSvgAsPng(document.getElementsByTagName("svg")[0], "diagram.png"); 

在此saveSvgAsPng库中,但它给出未能在'HTMLCanvasElement'上执行'toDataURL':受感染的画布可能无法导出。

我搜查,但不明白的问题是与画布的变换什么PNGSVG转换为画布,但画布上并没有转化为PNG

+0

您无法将资源转换为不是来自同一个域或没有相应权限的数据URL。这包括本地驱动器上的文件。搜索Tained画布了解更多信息。 – Blindman67

+0

@ Blindman67,从OP说,没有迹象表明跨国请求。 Najam-us-Saqib,你能告诉我们你生成的图表的标记吗?你也可以试试[这个脚本](https://github.com/Kaiido/SVG2Bitmap)我写的。请注意,IE Kaiido

+0

@Kaiido来提供解决方法错误的OP注释是”受污染的画布可能不会被导出“,这是由于源自画布的交叉来源资源。 – Blindman67

回答

1

如果像你正试图转换为SVG来自另一个域,您出于安全原因不能使用toDataUrl。

如果你有超过服务于图像域控制,将报头

Access-Control-Allow-Origin: http://www.domain-where-you-use-your-javascript.com 

服务的图像文件可以解决这个问题

(显然,正确的更换域名)时