一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情。
简介
翻译自官网
1、介绍
该脚本允许您直接在用户浏览器上对网页或其部分进行“截图”。屏幕截图基于 DOM,因此可能不是 100% 准确到真实表示,因为它不会制作实际的屏幕截图,而是根据页面上可用的信息构建屏幕截图。
2、运作
该脚本遍历它所加载的页面的 DOM。它收集那里所有元素的信息,然后使用这些信息来构建页面的表示。换句话说,它实际上并没有截取页面的屏幕截图,而是根据它从 DOM 读取的属性构建它的表示。
结果,它只能正确渲染它理解的属性,这意味着有许多 CSS 属性不起作用。有关支持的 CSS 属性的完整列表,请查看 支持的功能页面。
3、限制
脚本使用的所有图像都需要位于同一源下,以便无需代理 的帮助即可读取它们。同样,如果canvas
页面上有其他元素被跨域内容污染,它们将被污染并且不再被 html2canvas 读取。
该脚本不支持插件内容,例如 Flash 或 Java 小程序。
4、浏览器兼容性
该库应该可以在以下浏览器上正常工作(使用Promise
polyfill):
- 火狐 3.5+
- 谷歌浏览器
- Opera 12+
- IE9+
- Edge
- Safari 6+
官方地址
使用方法
- 先安装包,安装方法可以使用npm或者yarn
Install NPM
`npm install --save html2canvas`
或者使用
###### Install Yarn
`yarn add html2canvas`
引入文件
import html2canvas from 'html2canvas';
使用方法,以vue项目为例
html2canvas(document.body).then(function(canvas) {
document.body.appendChild(canvas);
});
// 也可以写成
const screenEl: any = document.getElementById('Screen');
html2canvas(screenEl, {
useCORS: true,
dpi:150,
scale:2,
})
.then((canvas: any) => {
// 生成的canvas
});
遇到的问题
1、透明边框问题
问题描述:
元素边框设置为透明时,生成的图片上透明度不是100%,会有白色的小边框,每次生成的透明度还都不一样。
解决思路:
网上找个很多方法,将透明色使用rgba模式或者transparent都没有效果。由于是透明边框,生成图片时就将透明边框去掉,但为了不改变元素样式,添加相应宽度的padding。问题得到解决,如果有更好的方法欢迎交流指正。
2、生成字体下沉对不齐的问题
问题描述:
页面中使用到多种字体,在谷歌浏览器上,生成图片时有的字体会下沉。
解决思路:
每种字体包的字体行高不一样,html2canvas在绘制文字时属性textBaseline
使用的默认值是alphabetic(普通的字母基线)
在转换的时候就会出现问题。
需要在源码中修改textBaseline
的属性值ideographic(表意基线)
js代码如下
_this.ctx.textBaseline = 'ideographic'
插入在源码的第6200行的位置,示意图如下
3、生成的图片像素问题
问题描述:
在window系统下载的图片要比mac环境下小很多,存在失真的现象。
解决思路: 主要考虑到是分辨率问题,另外就是图片的大小问题。html2canvas在配置参数中可以设置dpi参数,以及scale。刚开始dpi值设置的是300,导致生成的图片特别大。可以将dpi值设置到150,可以满足电子设备的使用,生成的图片体积也不会过大。
js代码如下:
html2canvas(screenEl, {
useCORS: true,
dpi:150,
scale:2,
})
.then((canvas: any) => {
})
今天的文章html2canvas库的使用教程以及一些问题解决方案分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/21898.html