我有一个SVG元素的节点。它是由D3生成的。
在我的Angular 2应用程序中,我需要使用该元素并使用dom-to-image将其转换为png。
我的问题是当我使用SVG元素并将其设置为img元素的src时,SVG代码被编码。
如何将实际字符串放入src?
这是我的代码。基本上我正在创建一个div,然后创建一个img,并将img src设置为节点中的内容。
var divelem = document.createElement('div');
var imgelem = document.createElement('img');
imgelem.height = 400;
imgelem.width = 300;
imgelem.src = node.outerHTML;
//imgelem.src = decodeURI(imgelem.src)
这是node.outerHTML
:
<svg width="166" height="195"><g trantsform="translate(86,[object Window])"><g class="layer" id="annual-stacked-bar" height="NaN" style="stroke-dasharray: 3, 3; fill: rgb(193, 191, 193);"><rect y="36.29999999999998" x="12" height="158.70000000000002" width="77.4"><text y="182.9" x="25.8" style="fill: rgb(255, 255, 255);">NaNundefined%</text></rect></g><g class="layer" id="annual-stacked-bar" height="NaN" style="stroke-dasharray: 3, 3; fill: rgb(142, 86, 158);"><rect y="15.669000000000011" x="12" height="20.630999999999972" width="77.4"><text y="31.07699999999998" x="25.8" style="fill: rgb(255, 255, 255);">NaNundefined%</text></rect></g><g><text dy=".9em" y="28.299999999999983" height="36.29999999999998">---------------------</text></g><g><text dy=".9em" x="100" y="26.299999999999983" height="36.29999999999998" style="fill: rgb(128, 128, 132);">Expected</text></g></g></svg>
imgelem.src
是
解码它没有帮助,因为它不是一个有效的URL,所以我不确定如何将node.outerHTML中的值放在imgelem.src中。
更新
我尝试这样做,但无论我做什么,一旦它被放入src
,它就会被编码。
imgelem.src =
'<svg width="166" height="195"><g trantsform="translate(86,[object Window])"><g class="layer" id="annual-stacked-bar" height="NaN" style="stroke-dasharray: 3, 3; fill: rgb(193, 191, 193);"><rect y="36.29999999999998" x="12" height="158.70000000000002" width="77.4"><text y="182.9" x="25.8" style="fill: rgb(255, 255, 255);">NaNundefined%</text></rect></g><g class="layer" id="annual-stacked-bar" height="NaN" style="stroke-dasharray: 3, 3; fill: rgb(142, 86, 158);"><rect y="15.669000000000011" x="12" height="20.630999999999972" width="77.4"><text y="31.07699999999998" x="25.8" style="fill: rgb(255, 255, 255);">NaNundefined%</text></rect></g><g><text dy=".9em" y="28.299999999999983" height="36.29999999999998">---------------------</text></g><g><text dy=".9em" x="100" y="26.299999999999983" height="36.29999999999998" style="fill: rgb(128, 128, 132);">Expected</text></g></g></svg>';
答案 0 :(得分:1)
要使其工作,您必须在图像的src
属性中放置一个字符串,不能放置标记(或SVG在您的情况下)
src:
是一个反映src HTML属性的DOMString,包含 图像的完整URL,包括基URI。
请参阅Image()
文档here
那么你最好的选择就是使用data url syntax,
这是一个有效的例子:
var svg = '<svg width="166" height="195"><g trantsform="translate(86, ...></svg>'
var serializer = new XMLSerializer()
var data = serializer.serializeToString(svg)
yourImageElement.src = "data:image/svg+xml;charset=utf-8," + data
我希望它会对你有所帮助!