我们在前端有时会把当前的页面显示成图片, 如订单, 物流信息打印出来, 这时, 我们要不用是使用截图工具转发, 要没就是手机拍照, 如果使用 js 来把当前的 html下载成为图片, 怎么做到呢
这里有一个工具 html2canvas 使用起来很简单


用法也很简单,html2canvas(这是里的参数是要使用 canvas 画的 html 上的文档节点)

看下面的这段代码

    daochu(){let node = this.$refs.aaa;html2canvas(node).then(function(canvas) {let img = new Image();img = canvas.toDataURL('image/png');var d = document.createElement("a");d.download = '';d.href = img;document.body.appendChild(a);d.click();d.remove();});},

这样就可以下载图片了
上面的代码是打开了,图片, 当然同时也下载了这个图片
下面的代码, 就是真正的下载一个文件了

downloadIamge(imgsrc, name) {//下载图片地址和图片名let image = new Image();// 解决跨域 Canvas 污染问题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编码数据let a = document.createElement("a"); // 生成一个a元素let event = new MouseEvent("click"); // 创建一个单击事件a.download = name || "photo"; // 设置图片名称a.href = url; // 将生成的URL设置为a.href属性a.dispatchEvent(event); // 触发a的单击事件};image.src = imgsrc;
},

下载原理

我们先看看 download 的使用方法:

<a href="http://somehost/somefile.zip" download="filename.zip">Download file</a>

看看上面的代码,只要为 <a> 标签添加 download 属性,我们点击这个链接的时候就会自动下载文件了~
顺便说下,download 的属性值是可选的,它用来指定下载文件的文件名。像上面的例子中,我们下载到本地的文件名就会是 filename.zip 拉,如果不指定的话,它就会是 somefile.zip 这个名字拉!

看到这里,你可能会说,坑爹啊,这明明是用 HTML 5 的新特性来实现下载文件嘛,说好的用 JavaScript 下载文件呢?

事实上,用 JavaScript 来下载文件也是利用这一特性来实现的,我们的 JavaScript 代码不外乎就是:

用 JavaScript 创建一个隐藏的 <a> 标签
设置它的 href 属性
设置它的 download 属性
用 JavaScript 来触发这个它的 click 事件
翻译成 JavaScript 代码就是:

var a = document.createElement('a');
var url = window.URL.createObjectURL(blob);
var filename = 'what-you-want.txt';
a.href = url;
a.download = filename;
a.click();
window.URL.revokeObjectURL(url);

window.URL

window.URL 里面有两个方法:

createObjectURL 用 blob 对象来创建一个 object URL(它是一个 DOMString),我们可以用这个 object URL 来表示某个 blob 对象,这个 object URL 可以用在 href 和 src 之类的属性上。
revokeObjectURL 释放由 createObjectURL 创建的 object URL,当该 object URL 不需要的时候,我们要主动调用这个方法来获取最佳性能和内存使用。
知道了这两个方法之后,我们再回去看看上面的例子就很容易理解了吧!只是用 blob 对象来创建一条 URL,然后让 标签引用该 URL,然后触发个点击事件,就可以下载文件了!

那么问题来了,blob 对象哪里来?

Blob

Blob 全称是 Binary large object,它表示一个类文件对象,可以用它来表示一个文件。根据 MDN 上面的说法,File API 也是基于 blob 来实现的。

 //例如 var img = new Image();  这个img 就是一个二进制对象//  filereader.readAsBinaryString

使用 js 把当前面下载成为图片相关推荐

  1. JS单个、批量下载图片

    <!DOCTYPE html> <html><head><meta charset="utf-8" /><title>& ...

  2. vue js 前端导出 下载 打印 图片 pdf html 局部打印

    html2canvas将HTML内容写入Canvas生成图片 print.js  打印插件 第一种方法: 原生js printDeal(val) {var printBox = document.ge ...

  3. 【jQuery】jQuery与vue实现点击下载图片 以及js实现批量打包下载图片

    原理:用canvas的toDataUrl() API获取到图片的base64编码,再利用触发a标签事件进行下载.(单张图片下载) 多张图片批量下载导出压缩包需要引入jsZip jQuery实现点击下载 ...

  4. JS兼容各个浏览器的本地图片上传即时预览效果

    JS兼容各个浏览器的本地图片上传即时预览效果 很早以前 在工作曾经碰到这么一个需求,当时也是纠结了很久,也是google了很久,没有碰到合适的demo,今天特意研究了下这方面的的问题,所以也就做了个简 ...

  5. 一款JS+CSS实现的无缝平滑图片滚动代码

    代码简介: 非常平滑的JS图片滚动特效代码,无缝循环,速度可自定义,鼠标悬停时停止.它的特点是JS和图片地址分离,这样做你就经易的从数据库动态调用每张图片的地址,方便控制,因此它非常的应用. 代码内容 ...

  6. Java爬虫之批量下载LibreStock图片(可输入关键词查询下载)

    前言(废话) 公司产品新版本刚刚上线,所以也终于得空休息一下了,有了一点时间.由于之前看到过爬虫,可以把网页上的数据通过代码自动提取出来,觉得挺有意思的,所以也想接触一下,但是网上很多爬虫很多都是基于 ...

  7. 使用chrome控制台下载页面图片

    利用chrome的javascript调试功能就能很容易 1.定义下载文件的方法 function download(src) {var $a = document.createElement('a' ...

  8. python爬取下载动态图片网站

    这次我们来爬取一个图片网站 unsplash.com,为什么要选择这个网站呢?因为这个网站的所有图片都是js动态请求生成的,所以说一般的爬取肯定是不行的啦 ~ 一.工具 这次爬取我们需要借助一款工具代 ...

  9. 视频播放html5网页video.js例子 源码下载

    视频播放html5网页video.js例子 源码下载 下载地址:链接:http://pan.baidu.com/s/1c2F2d12 密码:nysr 相关截图: (责任编辑:小锋) ------分隔线 ...

最新文章

  1. celery的log如何传递给django,由django管理
  2. 学习笔记-小甲鱼Python3学习第九讲:了不起的分支和循环3
  3. android 系统亮度,android 设置系统屏幕亮度
  4. ethercard php_关于EtherCard的webClient代码分析
  5. 2引擎帮助文档_Simcenter Amesim 16液压部分帮助文档中英文对照(2)
  6. 数据结构之结构体复习
  7. VMware workstation 磁盘扩容
  8. gps84转换gcj02公式_【测绘基础】关于投影坐标和坐标转换,这几点你不得不知道!...
  9. 《教孩子学编程(Python语言版)》——1.3 运行Python程序
  10. 百度文库的所有内容都可以不用财富值下载
  11. Modbus RTU转Modbus TCP网关的应用
  12. PDF字数统计后出现2个数字分别是什么
  13. hulu dpp_如何取消您的Hulu订阅
  14. 敏捷开发与Scrum区别(敏捷开发(Agile)教程)
  15. android滑动冲突的解决方案
  16. LeetCode/LintCode 题解丨一周爆刷字符串:乱序字符串
  17. Podman的基本设置和使用
  18. 平面坐标系旋转和平移
  19. 未来人类将被AI取代?一文读懂人工智能类型与发展阶段
  20. STM32 蓝牙平衡小车(一)硬件原理图

热门文章

  1. Flink大数据实时计算系列-Flink的Keyed state的使用
  2. Vue+ElementUi 项目中 将页面内容转为 Word文档下载
  3. 基于红外线通信的光电转换收发器(IR Transceiver)应用简介
  4. D. Returning Home(建图 + 堆优化最短路)
  5. 深度学习领域有哪些瓶颈?
  6. 《C Primer Plus中文版》第五版--学习记录3
  7. 空谈用户体验设计方法论
  8. pc版最终幻想测试软件,先来跑个分:《最终幻想15》PC版跑分软件发布
  9. 如何读群晖硬盘_详解群晖新增硬盘的操作步骤,给群晖NAS添加硬盘就是这么简单...
  10. 在html上点击一张图片时放大照片,网页中图片自动缩小,点击放大(以防页面被撑大)的方法...