在网页如何实现截图的功能
前端经常会遇到这样的业务场景,页面生成图片用于分享活动。
那么我们如何实现页面生成图片,也就是截图的功能呢
dom-to-image
dom-to-image
是一个可以将任意dom节点转换为图像的js库。
安装命令:
npm install dom-to-image
使用
获取png格式图片base64编码的data Url并显示
import domtoimage from 'dom-to-image'var node = document.getElementById('my-node');domtoimage.toPng(node).then(function (dataUrl) {var img = new Image();ima.src = dataUrl;document.body.appendChild(img);}).catch(function (error) {console.log(''oops, something went wrong!', error');})
获得png格式图片的blob对象并且下载
domtoimage.toBlob(document.getElementById('my-node')).then(function (blob) {window.saveAs(blob, 'my-node.png');});
下载压缩的jpeg格式图片
domtoimage.toJpeg(document.getElementById('my-node'), { quality: 0.95 }).then(function (dataUrl) {var link = document.createElement('a');link.download = 'my-image-name.jpeg';link.href = dataUrl;link.click();});
获得svg的data Url且过滤所有的
<i>
function filter (node) {return (node.tagName !== 'i');
}domtoimage.toSvg(document.getElementById('my-node'), {filter: filter}).then(function (dataUrl) {/* do something */});
以Uint8Array的方式获取原始像素数据,每4个数组元素表示一个像素的RGBA数据
var node = document.getElementById('my-node');domtoimage.toPixelData(node).then(function (pixels) {for (var y = 0; y < node.scrollHeight; ++y) {for (var x = 0; x < node.scrollWidth; ++x) {pixelAtXYOffset = (4 * y * node.scrollHeight) + (4 * x);/* pixelAtXY is a Uint8Array[4] containing RGBA values of the pixel at (x, y) in the range 0..255 */pixelAtXY = pixels.slice(pixelAtXYOffset, pixelAtXYOffset + 4);}}});
实现原理
dom-to-image
的实现原理主要依靠「svg标签的<foreginObject
元素和canvas」。
首先SVG要渲染成图片,必须要指定xmlns
(命名空间),否则会直接以普通XML文档树渲染。但是如果SVG如果直接内联在XHTML中,就不能指定命名空间。而在<foreginObject>
中允许包含任意的HTML内容,使得SVG能够正常渲染。
另外就是canvas
绘图。
function draw(domNode, options) {return toSvg(domNode, options).then(util.makeImage).then(util.delay(100)).then(function (image) {var canvas = newCanvas(domNode);canvas.getContext('2d').drawImage(image, 0, 0);return canvas;});
让我们来整理一下实现过程:
递归DOM节点,获取对应的XML代码
将XML放在
<foreginObject>
元素中,渲染成变成SVG图形使用
canvas.drawImage()
方法将图片放在画布上使用
canvas.toDataURL()
方法转换成PNG图片或JPG图片
在网页如何实现截图的功能相关推荐
- Leaflet框选截图 网页框选截图 -- 类似QQ截图功能
Leaflet框选截图 网页框选截图 -- 类似QQ截图功能 功能需求 搜索资源 功能拆分 进阶功能 结束语 实现截图(红框中即是将要截取的内容) 下载到本地的截图 功能需求 近日. 项目中有一需求: ...
- android拍照截图组件,Android_Android实现从相册截图的功能,在这篇文章中,我将向大家展 - phpStudy...
Android实现从相册截图的功能 在这篇文章中,我将向大家展示如何从相册截图. 先看看效果图: 上一篇文章中,我就拍照截图这一需求进行了详细的分析,试图让大家了解Android本身的限制,以及我们应 ...
- 微信长按网页保存为截图
本文是我处理问题时看到的一篇博客,感觉很详细,所以保存了, 原文地址 H5项目中的一个重要功能需求:实现微信长按网页保存为截图. 这里有个栗子(请用微信打开,长按图片即可保存):3分钟探索你的知识边界 ...
- Python将网页转化为PDF(python网页自动长截图)
初次实践:python网页自动截图 步骤如下: (1) 安装python selenium 库,推荐使用pip快速安装最新版本 pip install selenium (2) 检查Chrome浏览器 ...
- 怎么在html中复制粘贴图片,在网页中粘贴截图那些事儿
原标题:在网页中粘贴截图那些事儿 (点击上方公众号,可快速关注) 作者:郑武江(@OAuth_v2) 链接:seejs.me/2016/11/30/paste-snapshot/ 做这个尝试,只为了解 ...
- 本地如何预览php文件上传,如何实现js上传图片本地预览同时支持预览截图的功能...
在项目中经常会用到js上传图片本地预览的效果,同时需要在预览图上直接预览截图的范围. 下面是我写的简单的demo,是用js结合cropper.js模拟实现此项前端的功能,后台则不考虑. 准备:引入文件 ...
- chroom浏览器网页二维码生成功能的方法
谷歌浏览器二维码生成功能 在没有二维码的时候,我们如果要将电脑网页端的内容分享到移动端时,通常会复制内容,然后在粘贴到第三方通讯工具(微信.QQ)上发送给手机 其实早在Chrome85桌面端就上线网页 ...
- 国际网页短信软件平台后台功能篇|移讯云短信系统开发
国际网页短信软件后台功能篇|移讯云短信系统开发 平台外放接口介绍 支持接入CMPP接口,支持smpp通道接入,支持外放CMPP接口(其他平台可以通过CMPP接入我平台),支持HTTP API JSON ...
- 如何实现网页版滚动截图
如何实现网页版滚动截图 不是长截图,只截图当前页面的话使用QQ截图(Ctrl+Shift+a)微信截图(Alt+a)即可 方法一 工具:浏览器即可 按键盘上的F12按键,打开浏览器的console菜单 ...
最新文章
- 干货|100张PPT讲透工业机器人的机械结构
- 重新学习web后端开发-002-hello, world
- Windows XP添加网络打印机的方法
- 计算机设备抽象,计算机系统原理(三) 金字塔形的存储设备、操作系统的抽象概念...
- shell中的比较(if运算)
- 冯珊珊_模拟器企业衡泰信签约冯珊珊,推动高尔夫运动下沉
- 大数据(9) - Flume的安装与使用
- 小米荣耀互怼:头部高管们神仙打架 到底谁是谁非?
- vue过滤器微信小程序过滤器和百度智能小程序过滤器
- css学习_css用户界面样式
- 鸿蒙系统当贝市场,鸿蒙os2.0系统怎么安装?ota即可!能与当贝d3x投影仪大屏玩?...
- 20171129-构建之法:现代软件工程-阅读笔记
- 洛谷 P1420 最长连号【最长合法子序列/断则归一】
- python属于面向对象的还是面向过程的呀-面向过程和面向对象的理解
- 基于web的电影院订票系统(毕设系统,到手可用)
- 大华.dav视频格式转avi的一种办法
- sqlite转sql2000数据库
- 微信机器人 DIY 从 0 到 1
- WebRTC 概念介绍--一篇读懂source、track、sink、mediastream
- python如何写日志_python写日志