利用JavaScript将页面截图生成图片传给后台的插件:html2canvas
利用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){
}
});
})
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的更多相关文章
- 利用javascript实现页面截图
html2canvas可以通过纯JS对浏览器端经行截屏,但截图的精确度还有待提高,部分css不可识别,所以在canvas中不能完美呈现原画面样式 兼容性: Firefox 3.5+ Google Ch ...
- 利用JavaScript获取页面文档内容
JavaScript的document对象包含了页面的实际内容,所以利用document对象可以获取页面内容,例如页面标题.各个表单值. <!DOCTYPE html> <html ...
- JavaScript网站设计实践(四)编写about.html页面,利用JavaScript和DOM,选择性的显示和隐藏DIV元素
一.现在我们在网站设计(三)的基础上,来编写about.html页面. 这个页面要用到的知识点是利用JavaScript和DOM实现选择性地显示和隐藏某些DIV about.html页面在前面我们为了 ...
- 利用canvas将网页元素生成图片并保存在本地
利用canvas将网页元素生成图片并保存在本地 首先引入三个文件: 1.<script type="text/javascript" src="js/html2ca ...
- 利用 JavaScript SDK 部署网页版“Facebook 登录”
facebook开发者平台https://developers.facebook.com/ 利用 JavaScript SDK 部署网页版“Facebook 登录” 通过采用 Javascript 版 ...
- 利用Javascript判断操作系统的类型实现不同操作系统下的兼容性
原文地址 http://www.jb51.net/article/33640.htm 在通过Javascript实现客户端和服务端的交互时,有时候需要对操作系统进行判断,以便实现不同操作系统下的兼容性 ...
- JavaScript,php文件上传简单实现
非ajax,非iframe,最原始使用file控件的文件上传,记录过程备忘.(同步,页面刷新) 实现目标,能够将文件上传到指定位置. 客户端用input的file控件: <form action ...
- Javascript在页面加载时的执行顺序【转】
一.在HTML中嵌入Javasript的方法 直接在Javascript代码放在标记对<script>和</script>之间 由<script />标记的src属 ...
- 使用JavaScript把页面上的表格导出为Excel文件
如果在页面上展示了一个数据表格,而用户想把这个表格导出为Excel文件,那么在要求不高的情况下,可以不通过服务器生成表格,而是直接利用JavaScript的Blob和Object URL特性将表格导出 ...
随机推荐
- map容器结构体离散化
小数坐标离散化: #include"string.h" #include"stdio.h" #include"iostream" #incl ...
- 【node】------mongoose的基本使用------【巷子】
1.安装mongoose npm install mongoose 2.启动数据库 mongod --dbpath d:\data\db 3.引入mongoose模块并连接数据库 const mong ...
- 170629、springboot编程之Druid数据源和监控配置二
上篇是一种配置方式,虽然我们创建了servlet.filter但是没有任务编码,看着是不是很不爽.ok,接下来说一下简介的配置方式,使用代码注册Servlet,也是我个人比较推荐的! 1.创建Drui ...
- ubuntu16.04下用笔记本摄像头和ROS编译运行ORB_SLAM2的单目AR例程
要编译ORB_SLAM2的ROS例程首先需要安装ROS,以及在ROS下安装usb_cam驱动并调用,最后搭建ORB_SLAM2. 1.ROS的安装 我的电脑安装的是ubuntu16.04系统,所以我安 ...
- Golang OOP、继承、组合、接口
http://www.cnblogs.com/jasonxuli/p/6836399.html 传统 OOP 概念 OOP(面向对象编程)是对真实世界的一种抽象思维方式,可以在更高的层次上对所 ...
- 关于java web的笔记2018-01-12
需求:1.写一个商品类,有商品编号.商品名称.商品分类.商品单价属性.2.写一个商品条目信息类,有商品和数量两个属性,有商品总价格方法.3.写一个购物车类,有添加商品方法.查看订单信息,删除商品,修改 ...
- Oracle等待事件之等待事件详解
一. 等待事件的相关知识:1.1 等待事件主要可以分为两类:即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件.1). 空闲等待事件指ORACLE正等待某种工作,在诊断和优化数据库的时候, ...
- python3安装后无法使用退格键的问题
# 安装readline模块 yum -y install readline-devel # 进入Python安装目录 cd /usr/python/Python- # 重新安装 ./configur ...
- 两个提高工作效率的神器-Restlet Client和fe助手
首先是要FQ,百度***或者直接下载蓝灯. 然后安装第一个WEB前端助手:
- 第一个Shader程序
fx文件: float4x4 matWorld; float Time=1.0f; struct VS_OUTPUT { float4 Pos :POSITION; float4 Color :COL ...