利用JavaScript将页面截图生成图片传给后台的插件:html2canvas

一、总结

一句话总结:

10 <script type="text/javascript">
11 function takeScreenshot() {
12 html2canvas(document.getElementById('view')).then(function(canvas) {
13 document.body.appendChild(canvas);
14 });
15 }
16 </script>

1、html2canvas最简单实例代码?

注意canvas直接做参数传入函数:12 html2canvas(document.getElementById('view')).then(function(canvas) {

注意canvas直接被追加到body后面:13 document.body.appendChild(canvas);

 <!DOCTYPE html>
<html> <head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>html2canvas example</title>
<script src="html2canvas.min.js"></script>
</head>
<script type="text/javascript">
function takeScreenshot() {
html2canvas(document.getElementById('view')).then(function(canvas) {
document.body.appendChild(canvas);
});
}
</script>
<body>
<div id="view" style="background:url(test.jpg) 50%; width: 300px; height: 100px;">
<input type="button" value="截图" onclick="takeScreenshot()">
</div>
</body> </html>

二、利用JavaScript将页面截图生成图片传给后台的插件:html2canvas

html2canvas是将html代码转换成为图片的插件,本主亲测,觉得效果不错,其官网为:http://html2canvas.hertzen.com/

第一步:将html转化成canvas

第一步很简单,只要传入一个元素即可,如:

 
html2canvas(document.body).then(function(canvas) {
document.body.appendChild(canvas);
});
 

注:传入的元素不能是JQ对象而是原生的JS对象。

第二步:将canvas转化为图片

利用toDataURL方法进行转换:var imageData = canvas.toDataURL("image/jpeg");

其中,imageData 得到的是一串base64编码。

第三步:将base64转换成图片文件传给后台

编写一个base64编码转换成blob对象的方法:

    function getBlobBydataURI(dataURI,type){
var binary = atob(dataURI.split(',')[1]);
var array = [];
for(var i = 0; i < binary.length; i++) {
array.push(binary.charCodeAt(i));
}
return new Blob([new Uint8Array(array)], {type:type }); }

发请求:

    var formData = new FormData();

            var $Blob= getBlobBydataURI(imageData,'image/jpeg');

            formData.append('file',$Blob);
var timestamp = new Date().getTime();
formData.append('key',timestamp + '.png');//得到以当前时间命名的图片文件
for (var pair of formData.entries()) { if(typeof value == 'object'){
if(value.hasOwnProperty("name")){
pair[1].name = "1.jpg"
}
}
}
$.ajax({
url:ip + ' ',//接口
type:'post',
data:formData,
async: true,
crossDomain: true,
contentType: false,
processData: false,
success: function(data){ }
});

这样就大功告成了!

以上方法是将当前窗口可视的页面全都给截下来了,如果你想截指定元素的图,那么就把html2canvas(document.body)里面的元素换成指定的元素,但是,有的人会遇到图截不完整咋办?不要着急,这是因为官网上提供的dom抓取不支持高度,会造成只可以截到浏览器可见的,解决的方法是把将要截图的元素克隆一份,放到另外的元素中,设置position: absolute;z-index: 0;z-index要设置到最小即可

var height = $(".oldDiv").height()
//克隆节点,默认为false,不复制方法属性,为true是全部复制。
var cloneDom = $(".newDiv").clone(true);
//设置克隆节点的css属性,因为之前的层级为0,我们只需要比被克隆的节点层级低即可。
cloneDom.css({
"background-color": "white",
"position": "absolute",
"top": "0px",
"z-index": "-1",
"height": height
});
//将克隆节点动态追加到body后面。 $("body").append(cloneDom);

完整的代码如下:

         var height = $(".oldDiv").height()
//克隆节点,默认为false,不复制方法属性,为true是全部复制。
var cloneDom = $(".newDiv").clone(true);
//设置克隆节点的css属性,因为之前的层级为0,我们只需要比被克隆的节点层级低即可。
cloneDom.css({
"background-color": "white",
"position": "absolute",
"top": "0px",
"z-index": "-1",
"height": height
});
//将克隆节点动态追加到body后面。 $("body").append(cloneDom); html2canvas(cloneDom[0]).then(function(canvas){
function getBlobBydataURI(dataURI,type){
var binary = atob(dataURI.split(',')[1]);
var array = [];
for(var i = 0; i < binary.length; i++) {
array.push(binary.charCodeAt(i));
}
return new Blob([new Uint8Array(array)], {type:type });
}
var imageData = canvas.toDataURL("image/jpeg"); var formData = new FormData(); var $Blob= getBlobBydataURI(imageData,'image/jpeg'); formData.append('file',$Blob);
var timestamp = new Date().getTime();
formData.append('key',timestamp + '.png');//得到以当前时间命名的图片文件
for (var pair of formData.entries()) { if(typeof value == 'object'){
if(value.hasOwnProperty("name")){
pair[1].name = "1.jpg"
}
}
}
$.ajax({
url:api.url,
type:'post',
data:formData,
async: true,
crossDomain: true,
contentType: false,
processData: false,
success: function(data){ }
});
})
 
 
参考:利用JavaScript将页面截图生成图片传给后台的插件:html2canvas - huangxinglian的博客 - CSDN博客
https://blog.csdn.net/huangxinglian/article/details/80582299
 
 
 

三、html2canvas最最最简单实例

百度网盘下载地址:链接:https://pan.baidu.com/s/1ZZeKdgOu7iJb7Hx1xZEmxg
提取码:jnsr

1、截图

2、代码

 <!DOCTYPE html>
<html> <head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>html2canvas example</title>
<script src="html2canvas.min.js"></script>
</head>
<script type="text/javascript">
function takeScreenshot() {
html2canvas(document.getElementById('view')).then(function(canvas) {
document.body.appendChild(canvas);
});
}
</script>
<body>
<div id="view" style="background:url(test.jpg) 50%; width: 300px; height: 100px;">
<input type="button" value="截图" onclick="takeScreenshot()">
</div>
</body> </html>
 
 
 
 

利用JavaScript将页面截图生成图片传给后台的插件:html2canvas的更多相关文章

  1. 利用javascript实现页面截图

    html2canvas可以通过纯JS对浏览器端经行截屏,但截图的精确度还有待提高,部分css不可识别,所以在canvas中不能完美呈现原画面样式 兼容性: Firefox 3.5+ Google Ch ...

  2. 利用JavaScript获取页面文档内容

    JavaScript的document对象包含了页面的实际内容,所以利用document对象可以获取页面内容,例如页面标题.各个表单值. <!DOCTYPE html> <html ...

  3. JavaScript网站设计实践(四)编写about.html页面,利用JavaScript和DOM,选择性的显示和隐藏DIV元素

    一.现在我们在网站设计(三)的基础上,来编写about.html页面. 这个页面要用到的知识点是利用JavaScript和DOM实现选择性地显示和隐藏某些DIV about.html页面在前面我们为了 ...

  4. 利用canvas将网页元素生成图片并保存在本地

    利用canvas将网页元素生成图片并保存在本地 首先引入三个文件: 1.<script type="text/javascript" src="js/html2ca ...

  5. 利用 JavaScript SDK 部署网页版“Facebook 登录”

    facebook开发者平台https://developers.facebook.com/ 利用 JavaScript SDK 部署网页版“Facebook 登录” 通过采用 Javascript 版 ...

  6. 利用Javascript判断操作系统的类型实现不同操作系统下的兼容性

    原文地址 http://www.jb51.net/article/33640.htm 在通过Javascript实现客户端和服务端的交互时,有时候需要对操作系统进行判断,以便实现不同操作系统下的兼容性 ...

  7. JavaScript,php文件上传简单实现

    非ajax,非iframe,最原始使用file控件的文件上传,记录过程备忘.(同步,页面刷新) 实现目标,能够将文件上传到指定位置. 客户端用input的file控件: <form action ...

  8. Javascript在页面加载时的执行顺序【转】

    一.在HTML中嵌入Javasript的方法 直接在Javascript代码放在标记对<script>和</script>之间 由<script />标记的src属 ...

  9. 使用JavaScript把页面上的表格导出为Excel文件

    如果在页面上展示了一个数据表格,而用户想把这个表格导出为Excel文件,那么在要求不高的情况下,可以不通过服务器生成表格,而是直接利用JavaScript的Blob和Object URL特性将表格导出 ...

随机推荐

  1. 【JavaScript算法】---插入排序

    一.什么叫做插入排序法 有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法 二.核心 插入排序的基本操作 ...

  2. vuls漏洞扫描工具

    Vuls 是一款适用于 Linux/FreeBSD 的漏洞扫描程序,无代理,采用 Go 语言编写,对于系统管理员来说,每天必须执行安全漏洞分析和软件更新都是一个负担. 为避免生产环境宕机,系统管理员通 ...

  3. ASP.NET网站性能优化

    如果你是一个做过ASP网站,又做过ASP.NET网站的程序员,你可能会发现,如果按正常的思路开发ASP.NET网站,ASP.NET网站的速度会比ASP网站慢很多,为什么强大的网站语言会比弱得慢的,原因 ...

  4. codeforces#516 Div2---ABCD

    A---Make a triangle! http://codeforces.com/contest/1064/problem/A 题意: 给定三个整数表示三角形的边.每次给边长可以加一,问至少要加多 ...

  5. Day19 客户关系系统实战

    day19 今日内容 Service事务 客户关系管理系统     Service事务 在Service中使用ThreadLocal来完成事务,为将来学习Spring事务打基础! 1 DAO中的事务 ...

  6. 【Loadrunner】使用LoadRunner上传及下载文件

    使用LoadRunner上传及下载文件 1)LoadRunner上传文件 web_submit_data("importStudent.do", "Action=http ...

  7. 正则表达式python

    import re # re.match() 能够匹配出以xxx开头的字符串 ret = re.match(r"H", "Hello Python") # pr ...

  8. mysql 数据操作 多表查询 多表连接查询 内连接

    内连接:只连接匹配的行 只取两张表共同的部分,相当于利用where 过滤条件从笛卡尔积结果中筛选出了正确的结果 select * from 左表 inner join 要连接的表 on 条件 #dep ...

  9. Ubuntu下navicat过期解决办法

    Ubuntu下使用navicat过期.试用期是15天. 可以删除.navicat64/解决.不好的一点就是.需要重新连接数据库,以前的连接记录会被删除 rm -rf ~/.navicat64/

  10. Git冲突:commit your changes or stash them before you can merge. 解决办法

    用git pull来更新代码的时候,遇到了下面的问题: 1 2 3 4 error: Your local changes to the following files would be overwr ...