使用html2canvas实现屏幕截图
相关文件(vue3.0)
<script src="https://cdn.jsdelivr.net/bluebird/latest/bluebird.js"></script> //兼容IE
<script src="https://cdn.bootcss.com/html2canvas/0.5.0-beta3/html2canvas.js"></script>
//https://blog-static.cnblogs.com/files/wwj007/bluebird.js
//https://blog-static.cnblogs.com/files/wwj007/html2canvas.js
// 调用html2canvas插件
html2canvas(document.body).then(function (canvas) {
// canvas宽度
var canvasWidth = canvas.width;
// canvas高度
var canvasHeight = canvas.height;
// 调用Canvas2Image插件
var img = Canvas2Image.convertToImage(canvas, canvasWidth, canvasHeight);
//图片类型.宽度.高度.文件名
let type = document.getElementById('sel') ? document.getElementById('sel').getAttribute('value') : null
let w = document.getElementById('imgW') ? document.getElementById('imgW').getAttribute('value') : null
let h = document.getElementById('imgH') ? document.getElementById('imgH').getAttribute('value') : null
let f = document.getElementById('imgFileName') ? document.getElementById('imgFileName').getAttribute('value') : null
w = (w === '') ? canvasWidth : w; //判断输入宽高是否为空,为空时保持原来的值
h = (h === '') ? canvasHeight : h;
// 调用Canvas2Image插件
Canvas2Image.saveAsImage(canvas, w, h, type, f);
});
兼容 IE
html2canvas(document.body, {
allowTaint: false,
foreignObjectRendering: true,
taintTest: false,
useCORS: true,//火狐浏览器添加项
onrendered: function (canvas) {
var image = canvas.toDataURL("image/png").replace("image/png", "image/octet-stream");
var userAgent = navigator.userAgent;
//判断是否是IE11
if (-1 !== userAgent.indexOf("Trident")) {
var arr = image.split(',');
var mime = arr[0].match(/:(.*?);/)[1];
var bstr = atob(arr[1]);
var n = bstr.length;
var u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
window.navigator.msSaveBlob(new Blob([u8arr], { type: mime }), "download.png");
} else {
canvas.id = "mycanvas";
//生成base64图片数据
var dataUrl = canvas.toDataURL();
var newImg = document.createElement("img");
newImg.setAttribute('crossOrigin', 'anonymous');
newImg.src = dataUrl;
var b = document.createElement('a')
b.setAttribute("href", dataUrl)
b.setAttribute("download", "img.png")
document.body.appendChild(b)//火狐浏览器添加项
b.click(); b.remove()
}
}
});
截图到下载一键完成
使用html2canvas实现屏幕截图的更多相关文章
- js生成二维码/html2canvas生成屏幕截图
1.需求简述 (1) 最初需求: 根据后台接口获取url,生成一个二维码,用户可以长按保存为图片.(这时的二维码只是纯黑白像素构成的二维码) 方案1: 使用jquery.qrcode.min.js插件 ...
- ArcGIS地图打印那些事
记录了通过ArcGIS的PringTask进行地图打印,以及借助html2canvas实现屏幕截图的方法.两个方法各有适用的情景.过程中涉及的相关资源和问题给出链接,自行查看. 1.需求背景 地图打印 ...
- arcgis api for js入门开发系列二十打印地图的那些事
前面我写过关于利用arcgis api for js打印地图的,但是打印地图服务都是基于arcgis server发布的,arcgis api加载在线地图,比如天地图.百度地图.高德地图等,底图都是打 ...
- html2canvas页面截图图片不显示
前两天在一个群里,有人问使用html2canvas屏幕截图的时候为什么页面的图片不显示只显示了文字,我没有做过屏幕截图的需求,所以不是很清楚,今天稍稍测试了一下. 在github上将html2canv ...
- html2canvas脚本实现将html内容转换canvas内容
在开始使用html2canvas之前,有一些关于html2canvas及其一些限制的好处. 介绍 该脚本允许您直接在用户浏览器上截取网页或部分网页的“屏幕截图”.屏幕截图基于DOM,因此它可能不是真实 ...
- 对html2canvas的研究
介绍 该脚本允许您直接在用户浏览器上截取网页或部分网页的“屏幕截图”.屏幕截图基于DOM,因此它可能不是真实表示的100%准确,因为它没有制作实际的屏幕截图,而是根据页面上可用的信息构建屏幕截图. 这 ...
- 9. js屏幕截图
html2canvas 该脚本允许您直接在用户浏览器上截取网页或部分网页的“屏幕截图”.屏幕截图基于DOM,因此它可能不是真实表示的100%准确,因为它没有制作实际的屏幕截图,而是根据页面上可用的信息 ...
- 使用Python保存屏幕截图(不使用PIL)
起因 在极客学院讲授<使用Python编写远程控制程序>的课程中,涉及到查看被控制电脑屏幕截图的功能. 如果使用PIL,这个需求只需要三行代码: from PIL import Image ...
- 使用html2canvas实现浏览器截图
最近做项目为了解决全局异常信息记录,研究了一下浏览器全屏截图功能,方便用户发现异常时能够快速截图发给管理员.最终记录的异常信息如下,上面的[截图报告管理员]就是使用html2canvas前端插件实现的 ...
随机推荐
- 2018-2019-2 20175215 实验一《Java开发环境的熟悉》实验报告
一.实验内容及步骤 1.使用JDK编译.运行简单的Java程序 cd code进入code文件夹 mkdir 20175215exp1创建20175215exp1文件夹 ls查看当前目录 cd 201 ...
- 源码编译apache出错
报错信息如下 exports.c:1572: error: redefinition of `ap_hack_apr_allocator_create' exports.c:177: error: ` ...
- React组件库集锦及学习视频
[转载]https://www.rails365.net/articles/react-zui-hao-de-ui-zu-jian-ku-ji-jin 这里有一篇讨论,说了哪个才是 React 最好的 ...
- leetcode 496下一个更大的元素I
单调递减栈来做,time O(n),spaceO(n)需要一个哈希map class Solution { public: vector<int> nextGreaterElement(v ...
- Nova rebuild for boot from volume issue
目录 文章目录 目录 Nova boot from volume Rebuild Instance Rebuild for boot from volume Nova boot from volume ...
- 百度地图POI爬取
我们研究生的课程内容,做下笔记记录一下. 使用的python环境是python3.7 用的图大部分都是老师ppt里的图,懒得自己截了-- 申请百度开发者密匙 (1)注册百度用户,注册过的话,直接登录就 ...
- lnmp宝塔面板问题
使用宝塔面板后,无法安装zabbix客户端的依赖包,总是提示mariadb冲突,其实mariadb早就卸载完了,所以要安装zabbix客户端就不好使用宝塔面板
- APP Store上架QA&注意事项
一. App Store上架费用,要多少钱. 这个因产品而异,一般是6000-10000元人民币. 二. App Store上架周期,要多久过. 这个因产品而异,正常的话一周内,如果产品老是出问题,被 ...
- P2951 【[USACO09OPEN]捉迷藏Hide and Seek】
典型的最短路,而且只要再加一点点操作,就能得到答案 所以可以直接套模板 具体看程序:: #include<cstdio> #include<queue>//队列专属头文件 #i ...
- Java的HashMap键值对存储结构解析
容器总体结构 Map存储键值对的数据结构是“数组+链表”的结构,结合了数组查询数据快和链表增删数据快的优点:用Entry[]存储键值对,Entry为类类型,类里面有四个属性:hash.K.V.next ...