我目前正在與D3一起繪製一個svg的折線圖。我想保存svg,它工作正常。折線圖被保存,但我添加的背景圖像被省略。我只是得到一個簡單的顏色背景。保存一個SVG,背景圖像被忽略
以下是我如何添加背景以及如何保存svg的簡短示例。這是一個簡化的例子,沒有線條圖和網上找到的圖像。最初背景圖像是從Web服務器上的文件夾加載的。但結果是一樣的。我保存時沒有背景圖片。這沒有涉及的CSS。
http://jsfiddle.net/uphytob3/3/
這是它的腳本的一部分。
$("button.save_button").click(function() {
if ($(this).attr("value") == "export_image") {
save_svg();
}
});
var canvas = d3.select("#container")
.append("svg")
.attr("height", 440)
.attr("width", 503);
canvas.append("rect")
.attr("width", "100%")
.attr("height", "100%")
.attr("fill", "#FAFAFA");
canvas.append("image")
.attr("xlink:href", "https://media.licdn.com/mpr/mpr/shrinknp_800_800/AAEAAQAAAAAAAANNAAAAJDU2MmE4ODEwLTQ1YTAtNGFjNi1iNmM5LTY4NGFiN2I0NmI5Yg.png")
.attr("x", 0)
.attr("y", 0)
.attr("width", 503)
.attr("height", 440)
.attr("opacity", 0.5);
function save_svg() {
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 canvas = document.createElement("canvas");
canvas.height = 700;
canvas.width = 1400;
var context = canvas.getContext("2d");
var image = new Image;
image.src = imgsrc;
image.onload = function() {
context.drawImage(image, 0, 0);
var canvasdata = canvas.toDataURL("image/png");
var a = document.createElement("a");
a.download = "test.png";
a.href = canvasdata;
a.click();
};
}
我已經測試再次添加圖像時,我保存SVG,但沒有工作,因爲它要麼是隱藏折線圖的背後,由於線圖是不是透明的,或者是在上面的折線圖,隱藏其中的一部分。
這是一個修改的save_svg()函數。
function save_svg() {
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 canvas = document.createElement("canvas");
canvas.height = 700;
canvas.width = 1400;
var context = canvas.getContext("2d");
var image = new Image;
image.src = imgsrc;
var bg = new Image;
bg.src = "https://media.licdn.com/mpr/mpr/shrinknp_800_800/AAEAAQAAAAAAAANNAAAAJDU2MmE4ODEwLTQ1YTAtNGFjNi1iNmM5LTY4NGFiN2I0NmI5Yg.png";
image.onload = function() {
context.drawImage(image, 0, 0);
context.drawImage(bg, 0, 0);
var canvasdata = canvas.toDataURL("image/png");
var a = document.createElement("a");
a.download = "test.png";
a.href = canvasdata;
a.click();
};
關於如何在保存的圖像中獲取背景圖像的任何想法?
你是對的。我已經更新了這個問題以使其更清楚。由於jsfiddle不允許上傳圖片,因此我不得不使用外部圖片作爲示例。最初我使用位於Web服務器上img文件夾中的圖像。它仍然被認爲是外部的嗎? – Orjanp
是的。當我說「外部」時,我正在談論外部*到SVG *。 –