前端js保存頁面爲圖片下載到本地

前端js保存頁面爲圖片下載到本地

方案

  1. html2canvas.js:可將 htmldom 轉爲 canvas 元素。
  2. canvasAPI:toDataUrl() 可將 canvas 轉爲 base64 格式
  3. 替換 html 爲 img,src爲 base64

vue代碼片斷

  1. 手機端將頁面保存爲圖片(即頁面展示的內容實際是圖片),長按後可保存到本地
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%">`;
    });
}
  1. 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');
    });
}
相關文章
相關標籤/搜索