前端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');
});
}

前端js保存页面为图片下载到本地的更多相关文章

  1. python 爬虫之requests爬取页面图片的url,并将图片下载到本地

    大家好我叫hardy 需求:爬取某个页面,并把该页面的图片下载到本地 思考: img标签一个有多少种类型的src值?四种:1.以http开头的网络链接.2.以“//”开头网络地址.3.以“/”开头绝对 ...

  2. scrapy框架来爬取壁纸网站并将图片下载到本地文件中

    首先需要确定要爬取的内容,所以第一步就应该是要确定要爬的字段: 首先去items中确定要爬的内容 class MeizhuoItem(scrapy.Item): # define the fields ...

  3. [技术博客]使用wx.downloadfile将图片下载到本地临时存储

    目录 目标 代码展示 重点讲解 目标 在上一篇技术博客中,我们生成的海报中包含图片,这些图片是存储到服务器上的,而canvas的drawimage函数只能读取本地文件,因此我们在drawCanvas之 ...

  4. svg保存为图片下载到本地

    今天给大家说一个将svg下载到本地图片的方法,这里我不得不吐槽一下,为啥博客园不可以直接上传本地文件给大家用来直接下载分享呢,好,吐槽到此为止! 这里需要用到一个js文件,名字自己起,内容如下: (f ...

  5. js获取页面中图片的总数

    查看效果:http://keleyi.com/keleyi/phtml/image/9.htm 下面是完整代码: <html><body><div id="ke ...

  6. nodejs 将网上的图片下载到本地文件

    var request = require('request'); var fs = require('fs'); var img_src = 'https://www.baidu.com/img/b ...

  7. js转换页面为图片并下载

    <div style="background:red;width: 600px;height: 600px;" class="test"> < ...

  8. 手把手教小白如何用css+js实现页面中图片放大展示效果

    1.前言      很多童鞋会在项目中遇到一些上传图片,展示图片的操作,但是图片呢有大有小,为了页面的美观,有时候我们需要将图片展示成固定宽高度,但是呢,领导就会说,我想看大图片,怎么办?想看就看呀, ...

  9. php canvas 前端JS压缩,获取图片二进制流数据并上传

    <?php if(isset($_GET['upload']) && $_GET['upload'] == 'img'){ //二进制数据流 $data = file_get_c ...

随机推荐

  1. flask 中的ORM ( 二 )

    1 关系映射 1 多对多 1 什么是多对多 A表中的一条数据可以与B表中任意多条数据相关联 B表中的一条数据可以与A表中任意多条数据相关联 2 实现 在数据库中使用第三张表(关联表) 在编程语言中,可 ...

  2. Nginx 的关键组件的介绍

    本文章主要介绍Nginx本身功能,不依赖第三方的任何模块.介绍常用的组件功能:反向代理.负载均衡.Http服务器.正向代理 反向代理(Reverse Proxy): 什么是反向代理呢?本人最直接的理解 ...

  3. Linux学习笔记(八)Linux常用命令:用户登录查看命令

    一.查看登录用户信息 w [用户名] 二.Who who 三.查询当前登录和过去登陆的用户信息 last 四.查看所有用户最后一次登录时间 lastlog

  4. linux iptables理论学习

    近来回顾系统知识,想写个基于iptables安全防御的脚本,实现系统自动防护. 参考文档:http://blog.chinaunix.net/uid-26495963-id-3279216.html ...

  5. Java字节码方法表结构深度剖析

    继续上一次[https://www.cnblogs.com/webor2006/p/9459681.html]的字节码分析,这次来分析一下最为复杂的方法表的信息,如下: 而上一次分析到了属性表的位置在 ...

  6. @@identity, scope_identity ident_current 的区别

  7. 【数位DP-板子题目】HDU-3555-Bomb- [只要49]

    Bomb Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s): Accepted Su ...

  8. python_tkinter弹出对话框2

    1.fledialog对话框 示例:askopenfilename(选择单个文件,获取文件路径) import tkinter # 导入消息对话框子模块 import tkinter.filedial ...

  9. LINQ to Entities不识别C#语法报错

    错误:报错不识别string.Join…… var QueryWithStandard=from a in listA join b in listB on a.ID equals b.AID int ...

  10. Educational Codeforces Round 39 (Rated for Div. 2) 946E E. Largest Beautiful Number

    题: OvO http://codeforces.com/contest/946/problem/E CF 946E 解: 记读入串为 s ,答案串为 ans,记读入串长度为 len,下标从 1 开始 ...