【发布时间】:2014-05-22 10:53:34
【问题描述】:
我在导出包含 PNG 图像的 SVG 时遇到了一些麻烦。我正在使用 D3JS 和以下代码。
mysvg.append("image")
.attr("width", 299)
.attr("height", 168)
.attr("xlink:href", "image.png")
var html = d3.select("svg")
.attr("version", 1.1)
.attr("xmlns", "http://www.w3.org/2000/svg")
.node().parentNode.innerHTML;
var imgsrc = 'data:image/svg+xml;base64,'+ btoa(html);
var img = '<img src="'+imgsrc+'">';
d3.select("#chartRender").html(img);
似乎发生了错误:Namespace prefix xlink for href on image is not defined。
PNG 图像在 SVG 容器中正确显示,但在 #chartRender 中不正确显示
有什么想法吗?
更新 1: 在画布中绘制图像工作
canvas = d3.select("body").append("canvas").attr("id", "newCanvas")
.attr("width", "200px").attr("height", "100px").node()
context = canvas.getContext('2d')
imageObj = new Image()
imageObj.src = params.url
imageObj.onload = -> context.drawImage(imageObj, 0, 0)
但显示数据显示内容为空:(
imageData = canvas.toDataURL("image/png")
d3.select("body").append("img").datum(imageData).attr("src", (d)-> return d)
d3.select("svg").append("image").datum(imageData).attr("height", "100")
.attr("width", "200").attr("xlink:href", (d)-> return d)
【问题讨论】:
-
如果您从
元素引用 svg,出于安全原因,所有外部引用都会被浏览器阻止。您需要将 png 转换为数据 uri 以使其在该特定场景中工作,或使用
标签: javascript html svg d3.js