兼容ie9及以上的截图(基于html2canvas.js)
在公司项目中大胆使用了html5开发,但是偏偏要求兼容ie8以上浏览器,这里不得不骂一句狗日的ie。查了很多资料,发现只有ie9及以上才兼容html2canvas.js,所以我到现在也不知道兼容ie8的截图功能怎么做,若有哪位大神看到帖子,能帮帮忙,小弟感激不尽!!!话不多说,代码贴起。
1、需要导入的js包:jquery-3.2.1.min.js,html2canvas.js,bluebird.js,excanvas.compiled.js
需要的包都放在下面这个链接里了,bluebird.js是为了让ie兼容Promise 对象。
链接:
https://pan.baidu.com/s/1h86jSmyTiQcIkfN8100DqQ
密码:agzy
2、前端代码
<meta name="layout" content="main">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="../js/jquery-3.2.1.min.js"></script>
<script type="text/javascript" src="../js/html2canvas.js"></script>
<script type="text/javascript" src="../js/bluebird.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../js/html5shiv.min.js"></script>
<script type="text/javascript" src="../js/respond.min.js"></script>
<script type="text/javascript" src="../js/excanvas.compiled.js"></script>
<![endif]-->
<script type="text/javascript" >
function download(){
var oDiv = document.getElementById('pdfDiv');
var width = oDiv.offsetWidth;
var height = oDiv.offsetHeight;
var canvas = document.createElement("canvas");
var scale = 2;
canvas.width = width*scale;
canvas.height = height*scale;
canvas.getContext("2d").scale(scale,scale);
var opts = {
allowTaint:false,
scale:scale,
canvas:canvas,
width:width,
height:height,
useCORS:true
var oDivClone = $("#pdfDiv").clone();
var screenDiv = document.createElement("div");
screenDiv.style.cssText = "z-index: -9999;left: 0px;top: 0px;";
$("body").append($(screenDiv));
$(screenDiv).append($(oDivClone));
html2canvas(oDivClone[0],opts).then(function(canvas){
var context = canvas.getContext("2d");
context.mozImageSmoothingEnabled = false;
context.webkitImageSmoothingEnabled = false;
context.msImageSmoothingEnabled = false;
context.imageSmoothingEnabled = false;
var dataUrl = canvas.toDataURL();
if (window.navigator.msSaveOrOpenBlob) {
var blob = canvas.msToBlob();
window.navigator.msSaveBlob(blob,'a.png')
}else{
var a = document.createElement('a')
a.href = dataUrl
a.setAttribute('download', 'a.png')
a.click()
$(screenDiv).remove();
</script>
</head>
<img id="imgScrd" />
Hello!
<div id="pdfDiv" class="" style="background-color: #abc;">
计算机天堂测试html5页面截图
<br>jsjtt.com
<textArea id="textArea" col="20" rows="10" ></textArea>
<input class="example1" type="button" onclick="download();" value="button">
生成界面如下:
<div id="ddd" ></div>
<span id="sss"></span>
</body>
</html>
注:
html2canvas的参数是dom节点,所以若用jQuery对象需要转成
dom节点
。若是直接对目标区域截图,当目标的左边,上面有空隙的话,会把空白处也截下;并且还有一种情况,是目标区域是由
滚动条
的,会导致截图不完整。所以我把
目标区域clone一份到一个div中,并且绝对位置,左边上面空白设置为0px,使正确截图到目标区域
。
需要注意的是,有些时候截图打开是空白的,此时,你加大width和height,便可以截到。
这点我也纳闷了,不知道为啥。
2、目标区域中有自动换行的部分(word-wrap:break-word),在canvas中是不支持的,那我们怎么操作呢?中文的自动换行是可以的,但一长串的英文或者特殊字符字符串就不行了。我能想到的方法是 手动截取,没隔多少位插入
强行换行。
3、这时候我来讨论下兼容性问题,亲测,以上代码在谷歌、ie10以上都是可以的。ie9可以截到图,得到base64代码,但不能用以上两种方法下载到本地了。头大,想了很多办法都不行。看来光靠前端是不行的了,只能去后台转一圈了。把得到的base64代码传到后台,通过java代码解码转换为二进制文件流传到前台下载。
public static boolean Base64ToImage(String imgStr,String imgFilePath) { // 对字节数组字符串进行Base64解码并生成图片
if (StringUtil.isEmpty(imgStr)) // 图像数据为空
return false;
BASE64Decoder decoder = new BASE64Decoder();
try {
// Base64解码
byte[] b = decoder.decodeBuffer(imgStr);
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {// 调整异常数据
b[i] += 256;
OutputStream out = new FileOutputStream(imgFilePath);
out.write(b);
out.flush();
out.close();
return true;
} catch (Exception e) {
return false;
兼容ie9及以上的截图(基于html2canvas.js)在公司项目中大胆使用了html5开发,但是偏偏要求兼容ie8以上浏览器,这里不得不骂一句狗日的ie。查了很多资料,发现只有ie9及以上才兼容html2canvas.js,所以我到现在也不知道兼容ie8的截图功能怎么做,若有哪位大神看到帖子,能帮帮忙,小弟感激不尽!!!话不多说,代码贴起。1、需要导入的js包:jquery-3.2.1.m...
// jq 页面必备 必须引入元素嘛
<script src="./jquery-3.4.1.min.
js
"></script>
// bluebird 其实用得比较经常 babel es6 转es5 的一个插件
<script src="./bluebird.
js
"></script>
//
html
2
canvas
我们核心插件
请在这里查看示例 ☞ bluebird示例前言
ES6 Promise 对象浏览器支持情况如下: 所以如果要用 Promise 的话,还是建议引用 bluebird.
js
以下是我在 IE8 中测试示例
截
图
:
使用原生 Promise,报错 引用 bluebird.
js
后,正常运行 如果有不明白,可以先了解以下教程
Promise
大白话讲解Promise(一) - 需要熟悉
大白话讲解Pro
之前是引用vue-qr。发现ie里会报错,后改成
html
2
Canvas
.
1、首先是安装引用
html
2
Canvas
、
canvas
。百度很多
2、先把要
截
图
的东西线放在容器里,然后
截
取
let that = this
//创建一个新的
canvas
var
canvas
2 = document.createElement("
canvas
");
_
canvas
= this.$refs.imageWrapper;
var w = parse
1.将导出的
html
元素的背景设置为白色background-color: white;
2.
html
2
canvas
函数绘制时传入参数background: "#FFF",
html
2
canvas
($("#" + id), {
allowTaint: false,
scsle: 2,
### 回答1:
html
2
canvas
.
js
是一种JavaScript库,可以将网页区域转换成
图
片,并且可以保存为PNG格式或者JPEG格式。其主要应用场景在于将网页上的一段内容,比如高清
截
图
、数据统计
图
表等转换成
图
片,非常适用于一些需要
截
图
的业务场景。
该插件的下载连结可以从GitHub主页(http://github.com/niklasvh/
html
2
canvas
)和npm网站(http://npm
js
.com/package/
html
2
canvas
)获取。在下载和集成使用该插件的过程中,需要注意一些事项。
首先,需要理解该插件对于浏览器的依赖性。该插件支持Chrome、Firefox、Safari、IE9+等主流浏览器,但并不支持在移动设备上使用。同时,如果您在调用该插件时,发现出现了某些问题,可以尝试更新浏览器版本或者是查看该插件在GitHub上的issue列表,看是否有其他用户已经遇到并解决了该问题。
其次,下载并引入该插件后,需要了解该插件的使用方法和相关API。该插件有许多自定义参数,比如
截
图
的格式、生成的
图
片的质量、是否忽略某些元素等等。在使用该插件时,应该按需求进行参数配置,提高
截
图
效果和生成
图
片的性能。
最后,在使用该插件过程中,需要注意对用户隐私的保护。如果您使用该插件进行
截
屏操作,应该明确告知用户您需要对其网页进行
截
屏,避免违反用户隐私的规定。同时,为了防止
截
屏操作被滥用,建议配置相关权限,避免插件被恶意利用。
### 回答2:
html
2
canvas
.
js
是一个JavaScript库,用来将网页中的元素转换成
canvas
图
像。这个库能够生成高质量、可编辑的
canvas
图
像,这对于网站设计师和开发者来说是非常有用的。
html
2
canvas
.
js
库非常易用,代码精简,同时支持各种浏览器和操作系统。
html
2
canvas
.
js
库的下载非常方便,可以从Github官网或者其他源代码库中下载。下载下来的文件是一个JavaScript库文件,可以被集成到任何网站中。该库只需要与
html
和JavaScript代码一起使用,就能够将网页元素快速转换成
canvas
图
像。
html
2
canvas
.
js
库的使用方法非常简单,只需要在JavaScript代码中引入库,并调用相关函数即可。在转换时,可以指定需要转换的dom元素,也可以只转换某个区域内的元素。同时,该库还支持设置转换后的
图
像大小、背景色、文本字体、压缩质量等选项。
作为一款专门用来生成
canvas
图
像的JavaScript库,
html
2
canvas
.
js
的应用领域非常广泛。它可以被用于网站
截
图
、
图
片生成、数据可视化、广告渲染等。同时,该库还可以用来实现网站
图
片压缩和生成缩略
图
等功能。
总之,
html
2
canvas
.
js
是一个功能强大、易用性高的JavaScript库,它为网站设计师和开发者提供了非常有用的工具,能够让网站更加具有创意和互动性。如果你正在进行网站开发或者设计,那么
html
2
canvas
.
js
是一个不可错过的库。
### 回答3:
HTML
2
Canvas
是一个JavaScript库,它允许在客户端端将
HTML
文档渲染成
canvas
。如果您想在应用程序中捕捉网页内容并将其导出为
图
像格式,这个库非常有用。
HTML
2
Canvas
可以捕捉DOM中的任何可见元素(包括位于窗口之外的部分)、
图
像、文字和样式,并生成类似于
截
图
的
图
像。
要下载
HTML
2
Canvas
,第一步是到github上找到它的源代码。地址为https://github.com/niklasvh/
html
2
canvas
。这里您可以访问该项目的文档,并按照说明安装它。该项目提供了完整的JavaScript库,可以从页面上下载或使用npm等包管理器下载。在下载源代码后,在
HTML
文件中引用
HTML
2
Canvas
库文件,做到如下:
<script src = "/path/to/
html
2
canvas
.min.
js
"></script>
接下来,就可以使用
HTML
2
Canvas
提供的API将DOM元素渲染成
canvas
对象。一旦捕捉了可见的DOM元素,您可以导出
图
像到PNG、JPEG和其他流行格式中。
HTML
2
Canvas
库还允许您设置导出
图
像的大小、缩放比例和其他属性。
HTML
2
Canvas
是一个强大的工具,可以方便地在您的应用程序或网站中实现
截
图
功能。无论您是开发一个
图
像编辑应用程序,还是需要捕捉用户范例,
HTML
2
Canvas
库都是值得研究的一款工具。使用
HTML
2
Canvas
将DOM元素转换为可编辑的
图
像,您可以将任何网页内容转换为易于编辑和共享的格式。