利用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. 【php】---mysql语法增、删、改、查---【巷子】

    1.mysql基本语法 001.增 语法:          insert into 表名 (列1,列2,列3) values(值1,值2,值3)     批量插入:插入insert-插入多行   语 ...

  2. 07.Curator计数器

        这一篇文章我们将学习使用Curator来实现计数器.顾名思义,计数器是用来计数的,利用ZooKeeper可以实现一个集群共享的计数器.只要使用相同的path就可以得到最新的计数器值,这是由Zo ...

  3. js常用的几个验证

    /// <summary> ///1. 使用正则表达式验证 参数 是否 为数值 /// </summary> /// <param name="trNumber ...

  4. MySQL集群简介与配置详解

    1. 先了解一下你是否应该用MySQL集群. 减少数据中心结点压力和大数据量处理,采用把MySQL分布,一个或多个application对应一个MySQL数据库.把几个MySQL数据库公用的数据做出共 ...

  5. nginx ---refine---按需时间/流量进行调整后台服务器---geocity,proxypass

    原理相当于配置文件在启动时进行编译,proxyPass http://mydomain/path/xxxx这种方式是编译成静态的,直接替换成它解析到的ip/vip,只有重新启动时才会重新解析. 而 s ...

  6. AJAX.basic

    之前在项目中使用ajax都是通过jQuery的Ajax API来进行的,今天试了一下通过基本的JavaScript来进行ajax请求,将代码记录下来: jsp 页面 <%@ page pageE ...

  7. 【代码片段】Python发送带图片的邮件

    # coding=utf-8 import smtplib from email.mime.text import MIMEText from email.mime.multipart import ...

  8. Centos7使用yum下载rpm包而不执行安装

    yum-downloadonly是yum的一个插件,使得yum可以从RHN或者yum的仓库只下载包而不安装. 举例,从yum源下载ricci软件包 # yum install --downloadon ...

  9. 【Cocos2dx 3.x Lua】TileMap使用

    1.编辑TileMap地图资源 2.Cocos2dx 3.x Lua中使用TileMap   Link: http://codepad.org/P0nFP1Dx  local TileMap=clas ...

  10. 2018 Multi-University Training Contest 2 Solution

    A - Absolute 留坑. B - Counting Permutations 留坑. C - Cover 留坑. D - Game puts("Yes") #include ...