前端js保存頁面爲圖片下載到本地
方案
- html2canvas.js:可將 htmldom 轉爲 canvas 元素。
- canvasAPI:toDataUrl() 可將 canvas 轉爲 base64 格式
- 替換 html 爲 img,src爲 base64
vue代碼片斷
- 手機端將頁面保存爲圖片(即頁面展示的內容實際是圖片),長按後可保存到本地
import html2canvas from 'html2canvas';
replaceHtml2Img () {
// 獲取想要轉換的 DOM 節點
const dom = this.$refs['container'];
// DOM 節點計算後寬高
let {width, height} = dom.getBoundingClientRect();
// 獲取像素比
const dpr = window.devicePixelRatio || 1;
// 建立自定義 canvas 元素
const canvas = document.createElement('canvas');
// 設定 canvas 元素屬性寬高爲 DOM 節點寬高 * 像素比
canvas.width = width * dpr;
canvas.height = height * dpr;
// 設定 canvas css寬高爲 DOM 節點寬高
canvas.style.width = `${width}px`;
canvas.style.height = `${height}px`;
// 獲取畫筆
const context = canvas.getContext('2d');
// 將全部繪製內容放大像素比倍,解決dpr不一樣圖片模糊問題
context.scale(dpr, dpr);
// 將自定義 canvas 做爲配置項傳入,開始繪製
html2canvas(dom, {canvas}).then((canvas) => {
let dataUrl = canvas.toDataURL("image/png", 1.0);
let parent = dom.parentNode;
parent.innerHTML = `<img src="${dataUrl}" style="width: 100%">`;
});
}
- pc端點擊按鈕下載頁面dom爲圖片到本地
handleDownload (id) {
let ele = document.getElementById(id);
let ignoreElements = ele.querySelector('.chart-download');
html2canvas(ele, {
logging: false,
ignoreElements: (elements) => { // 忽略的ele
return elements === ignoreElements;
}
}).then(function (canvas) {
// canvas轉爲圖片流
let dataurl = canvas.toDataURL('image/png');
/*
// 非ie下正常,主要緣由是ie下a標籤不支持download屬性
let donwLink = document.createElement('a');
donwLink.href = dataurl;
donwLink.download = "統計分析" + new Date().getTime(); // 圖片名字
donwLink.click();
let event = new MouseEvent('click');
donwLink.dispatchEvent(event);
*/
// 使用downloadjs兼容ie下下載,https://github.com/rndme/download
// download(data, strFileName, strMimeType);
downloadjs(dataurl, `統計分析${new Date().getTime()}`, 'image/png');
});
}