我使用圖像將圖片加載到畫布上。
然後我想讓我的用戶選擇將圖像保存到他們的硬盤上。將圖像保存到硬盤驅動器
我周圍搜索,有很多方法可以做到這一點,如果我使用Ajax和從我的服務器檢索。
有沒有一種方法,以避免任何車次到我的服務器,並直接或者通過圖像控件或畫布控制
我使用圖像將圖片加載到畫布上。
然後我想讓我的用戶選擇將圖像保存到他們的硬盤上。將圖像保存到硬盤驅動器
我周圍搜索,有很多方法可以做到這一點,如果我使用Ajax和從我的服務器檢索。
有沒有一種方法,以避免任何車次到我的服務器,並直接或者通過圖像控件或畫布控制
您實際上可以通過使用HTML5 download attribute來獲得所需的效果。
的步驟將是:
download
屬性onclick
事件類似這樣的:
myCanvas = document.getElementById("myCanvas");
$("body").append("<a id='hiddenLink' href='" + myCanvas.toDataURL() + "' style='display:none;' download>Download Pic</a>");
$("#hiddenLink")[0].click();
$("#hiddenLink").remove();
你可以看到它在這裏工作:http://jsfiddle.net/wLd4yf7k/
一個問題:不是所有的瀏覽器都支持它:http://caniuse.com/#feat=download
在這裏,你必須使用專門的JavaScript的解決方案(沒有的jQuery) ,因爲我看到你沒有添加jQuery標籤的問題:
myCanvas = document.getElementById("myCanvas");
a = document.createElement("a");
a.href = myCanvas.toDataURL();
a.download = "download";
a.click();
你可以看到它w在小提琴上操作:http://jsfiddle.net/wLd4yf7k/1/
兩個注意事項:1)你可以有一個鏈接已經在頁面上(保存步驟2和4,但需要更新'href'); 2)我使用了w3schools網站上的畫布範例(與答案無關,但爲防萬一有人說我沒有相信源或什麼) – 2015-03-13 14:24:29
哦,我不知道這個,很好。在不支持的情況下,您可以在選項卡方法中恢復打開,但這項功能非常好用 – Quince 2015-03-13 14:32:10
對不起,延遲了。剛回到我的辦公桌。無論如何要控制它在哪裏保存?它會默認到我的下載目錄(如預期的那樣) – 2015-03-13 17:15:03
所以你幾乎可以做到這一點保存到我的硬盤驅動器。在我的評論中,我提到了創建和下載PDF文件的PDF生成器。這是有效的,因爲當打開PDF文件時,瀏覽器的自動操作(大多數情況下)是下載文件。當您使用圖片進行此操作時,它將在新標籤中打開,但您至少可以右鍵單擊並保存。
它可以通過調用畫布toDataUrl()
這裏window.open
是使用chartjs
var data = {
labels: ["January", "February", "March", "April", "May", "June", "July"],
datasets: [
{
label: "My First dataset",
fillColor: "rgba(220,220,220,0.2)",
strokeColor: "rgba(220,220,220,1)",
pointColor: "rgba(220,220,220,1)",
pointStrokeColor: "#fff",
pointHighlightFill: "#fff",
pointHighlightStroke: "rgba(220,220,220,1)",
data: [65, 59, 80, 81, 56, 55, 40]
},
{
label: "My Second dataset",
fillColor: "rgba(151,187,205,0.2)",
strokeColor: "rgba(151,187,205,1)",
pointColor: "rgba(0,0,0,0)",
pointStrokeColor: "rgba(0,0,0,0)",
pointHighlightFill: "rgba(0,0,0,0)",
pointHighlightStroke: "rgba(151,187,205,1)",
data: [28, 48, 40, 19, 86, 27, 90]
}
]
};
var chart_canvas = document.getElementById("canvas").getContext("2d");
var line_chart= new Chart(chart_canvas).Line(data);
$("button").on("click", function(){
window.open(document.getElementById("canvas").toDataURL());
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/1.0.1/Chart.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="chart_container"style="width: 50%">
<canvas id="canvas" height="450" width="600"></canvas>
<button> save </button>
</div>
嗨看起來很有希望。謝謝 – 2015-03-13 14:15:43
這是值得了解的,但我寧願沒有其他標籤打開。無論如何,畫布可以右鍵單擊並保存爲圖像,而無需執行此操作? – 2015-03-13 17:10:45
是啊,你是對的,這並沒有真正添加太多 – Quince 2015-03-13 17:15:10
不,這是一個安全風險,並且因爲很好的原因而被阻止。 – 2015-03-13 13:45:16
@JohnConde謝謝。這是我的想法。保存我看:) – 2015-03-13 13:45:45
@JohnConde不''有''toDataURL()'方法?它不能用於創建一個鏈接,從中可以「下載」圖像? – 2015-03-13 13:47:29