1:需求
點擊按鈕保存線上圖片到本地
2:解決思路
2.1 圖片服務器配置Access-Control-Allow-Origin(跨域)
2.2 創(chuàng)建 Image 對象,通過a標簽的download屬性實現(xiàn)下載(因為圖片不是本地圖片,所以需要轉換base64)
let file_url = "https://xxx";
let image = new Image();
image.setAttribute("crossOrigin", "anonymous");
image.onload = function() {
let canvas = document.createElement("canvas");
canvas.width = image.width;
canvas.height = image.height;
let context = canvas.getContext("2d");
context.drawImage(image, 0, 0, image.width, image.height);
let url = canvas.toDataURL("image/png"); //得到圖片的base64編碼數(shù)據(jù)
let a = document.createElement("a"); // 生成一個a元素
let event = new MouseEvent("click"); // 創(chuàng)建一個單擊事件
a.download = "海報"; // 設置圖片名稱沒有設置則為默認
a.href = url; // 將生成的URL設置為a.href屬性
a.dispatchEvent(event); // 觸發(fā)a的單擊事件
};
image.src = file_url + '?random='+Math.random(); // 加個隨機數(shù)清空緩存
image.onerror = (error) => {
// alert(JSON.stringify(error))
alert('圖片保存失敗')
}
3:踩坑
微信端,移動端不支持a標簽下載圖片!
4:解決思路
瀏覽器和微信保存圖片還是需要用戶長按保存,調起內置菜單來完成(暫無更好的方法)