canvas-screenshot 视频截屏功能,选择视频的一个区域,进行截图
预览地址:http://pengchenggang.gitee.io/canvas-screenshot/
参考资料:https://www.canvasapi.cn/
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CanvasScreenshot</title>
</head>
<body>
<div style="height: 50px;">
gitee 上面 不能播放视频,所以换成图片 原理一样,用鼠标框取图片内容
</div>
<div style="position: relative; height: 477px;">
<img id="imgId" style="position: absolute;" src="Picture.jpg" width="848" height="477" />
<!-- <video id="videoId" src="1920.mp4" autoplay style="position: absolute;width:848px; height: 477px;"></video> -->
<canvas id="canvasId" style="position: absolute;" width="848" height="477"></canvas>
</div>
<div style="clear: both;"></div>
<canvas id="canvasShot" style="display: none;" width="1920" height="1080"></canvas>
<img id="showPic" />
<script>
var img, cid, ctx
var _x1, _y1, _x2, _y2
var drawing = false
var offset = 0
var picSizeW
var picSizeH
function main() {
/** @type {HTMLCanvasElement} */
img = document.getElementById("imgId")
cid = document.getElementById("canvasId")
ctx = cid.getContext("2d")
ctx.lineWidth = 2;
ctx.strokeStyle = "#c72e1e";
cid.addEventListener('click', function (e) {
console.info('cid is click', e)
var x = e.layerX
var y = e.layerY
// console.info("x is %s, y is %s", x, y)
})
cid.addEventListener("mousedown", function (e) {
// console.info('cid is mousedown', e)
if (drawing) {
drawing = false
return
}
_x1 = e.layerX - offset
_y1 = e.layerY - offset
drawing = true
// render()
})
cid.addEventListener("mouseup", function (e) {
// console.info('cid is mouseup', e)
drawing = false
if (_x2 < _x1) {
var t = _x2
_x2 = _x1
_x1 = t
}
if (_y2 < _y1) {
var t = _y2
_y2 = _y1
_y1 = t
}
picSizeW = _x2 - _x1
picSizeH = _y2 - _y1
if (picSizeW > 2 && picSizeH > 2) {
console.info('图片宽高均大于2px,认为可以执行截屏操作')
getShot()
} else {
ctx.clearRect(0, 0, 848, 477);
}
})
cid.addEventListener("mousemove", function (e) {
_x2 = e.layerX - offset
_y2 = e.layerY - offset
render()
})
cid.oncontextmenu = function (ev) {
ev.preventDefault();
}
}
function render() {
if (!drawing) return
ctx.clearRect(0, 0, 848, 477);
// ctx.drawImage(img, 0, 0, 800, 300)
ctx.fillStyle = 'rgba(225,225,225,0.5)';
ctx.fillRect(0, 0, 848, 477);
var w = _x2 - _x1
var h = _y2 - _y1
ctx.clearRect(_x1, _y1, w, h);
ctx.strokeRect(_x1, _y1, w, h);
}
function getShot() {
var canvasShotId = document.getElementById("canvasShot")
var csId_ctx = canvasShotId.getContext('2d')
var vId = document.getElementById("imgId")
canvasShotId.width = 1920;
canvasShotId.height = 1080;
csId_ctx.drawImage(vId, 0, 0, 1920, 1080)
var n = getRealParams(_x1, _y1, _x2, _y2)
var imageData = csId_ctx.getImageData(n._x1, n._y1, n.picSizeW, n.picSizeH)
canvasShotId.width = n.picSizeW;
canvasShotId.height = n.picSizeH;
csId_ctx.putImageData(imageData, 0, 0) // , 0, 0, n.picSizeW, n.picSizeW)
var image = canvasShotId.toDataURL('image/jpeg', 0.8)
var showPicRef = document.getElementById("showPic")
showPicRef.src = image
}
function getRealParams(x, y, x2, y2) {
console.info('x, y, x2, y2', x, y, x2, y2)
var _x = x / 848 * 1920
var _y = y / 477 * 1080
var _x2 = x2 / 848 * 1920
var _y2 = y2 / 477 * 1080
var ret = {
_x1: _x,
_y1: _y,
picSizeW: _x2 - _x,
picSizeH: _y2 - _y
}
console.info('ret', ret)
return ret
}
main()
</script>
</body>
</html>
canvas-screenshot 视频截屏功能,选择视频的一个区域,进行截图的更多相关文章
- 【玩转cocos2d-x之三十九】Cocos2d-x 3.0截屏功能集成
3.0的截屏和2.x的截屏基本上同样.都是利用RenderTexture来处理,在渲染之前调用call函数,然后调用Cocos的场景visit函数对其进行渲染,渲染结束后调用end函数就可以.仅仅是3 ...
- PhantomJS linux系统下安装步骤及使用方法(网页截屏功能)
PhantomJS 是一个基于 WebKit 的服务器端 JavaScript API.它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准: DOM 处理, CSS 选择器, JSON, ...
- android4.3 截屏功能的尝试与失败分析
1.背景 上一篇讲了在源码中捕获到了android手机的截屏函数(同时按下电源键与音量减,详情http://blog.csdn.net/buptgshengod/article/details/199 ...
- iOS截屏功能
代码: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. // ...
- Android自己定义截屏功能,相似QQ截屏
由于公司业务需求 须要对一个屏幕进行截屏.但自带的截屏功能是远远不够项目的功能需求 ,我们是做一个画板软件 .须要的像QQ那样截屏之后 ,能够看到我们自己定义的工具.有画笔,button等等 .and ...
- Atitit截屏功能的设计解决方案
Atitit截屏功能的设计解决方案 自己实现.... 使用快捷键.. 弹出自己的win,,背景是屏幕快照 点击鼠标光标变成十字状态 出现截屏窗口调整截屏窗口位置与大小 释放鼠标,三个btn,, 复制 ...
- Mac下的截屏功能
全屏截图 对全屏的截图我们可以通过按 苹果键(花键)+Shift键+3来执行,之后伴随着清脆的一声提示音后,在桌面上就会生成一个图片文件,这就是刚刚截屏的图片了,默认文件类型是PNG的. 自定义截图 ...
- 使用laravel框架与phantomjs实现截屏功能
在网上看到的关于phantomjs实现截屏功能很多都是与node结合在一起使用,并需要输入命令才能执行.因此我想要实现输入网址即可截屏并输出图片的功能.示例:http://120.77.171.182 ...
- [置顶] Android 应用内禁止截屏功能的实现
截图介绍 Android的调试工具DDMS提供有截屏功能,很多软件也会有截屏功能,在做支付等安全类应用的时候,为了保证用户的资产和系统安全,往往会禁止应用内截屏,禁止之后,在此应用处于前台的情况下 ...
- 小胖说事22-----iOS开发技巧之取消键盘响应和截屏功能
1.UILable内容模糊 在非Retina的iPad mini 的屏幕上,一个UILable的frame的origin值假设是有小数位(如0.5),就会造成显示模糊,所以不妨用整数值的origin. ...
随机推荐
- 8.5 CheckRemoteDebuggerPresent
CheckRemoteDebuggerPresent 也是一个微软提供的反调试函数,该函数可以在本地或者远程进程中使用.函数接收两个参数进程句柄和一个指向布尔值的指针.如果指定的进程正在被调试,则函数 ...
- Odoo16—即时通信模块discuss
odoo中自带的discuss模块是一个简易版的即时通信系统,虽然简单,但是功能还是挺强劲的.可以发送图文消息,可以语音,可以视频,也可以共享屏幕,看下效果吧! PC端效果 手机端效果 重点说明 没错 ...
- MySQL主主同步环境出现1236错误
环境: MySQL 5.7.25 主主架构 故障现象: 发现互相之间的同步均发生异常,两端均出现1236错误,在两个主节点上分别执行show slave status显示的关键信息如下: Master ...
- NC14699 队伍配置
题目链接 题目 题目描述 萌学姐在玩大型手游<futa go>,他现在准备进入作战环节,所以他准备安排自己的队伍. 队伍配置里,可供玩家选择的作战人物被称作"从者",玩 ...
- MQTT-基础理念
MQTT与HTTP的区别 HTTP协议是客户端与服务端直连请求与响应 MQTT是基于发布订阅模型的轻量级的消息传输协议 MQTT能力 发布:Publish 订阅:Subscribe 代理:Broker ...
- Typora 快捷方式给字体设置颜色
1.下载并安装 AutoHotkey (具体步骤可自行百度) 访问 AutoHotkey 主页: https://autohotkey.com/ 点击下载: https://autohotkey.co ...
- 使用CNN实现MNIST数据集分类
1 MNIST数据集和CNN网络配置 关于MNIST数据集的说明及配置见使用TensorFlow实现MNIST数据集分类 CNN网络参数配置如下: 原始数据:输入为[28,28],输出为[1,10] ...
- 实操开源版全栈测试工具RunnerGo安装(二)Linux安装
手动安装(支持Linux.MacOS.Windows) Linux安装步骤 以debian系统为例,其他linux系统参考官方文档:https://docs.docker.com/engine/ins ...
- IDA 反汇编 explorer
之前写过一篇关于 IDA 在无 dmp 文件下如何定位到崩溃点的文章,由于其中涉及到公司项目,就仅限自己看了 正好今天看到一篇关于火绒软件误杀 explorer 的文章,并且有相关的复现过程 文章已经 ...
- ASP.NET Core MVC应用模型的构建[1]: 应用的蓝图
我个人觉得这是ASP.NET Core MVC框架体系最核心的部分.原因很简单,MVC框架建立在ASP.NET Core路由终结点上,它最终的目的就是将每个Action方法映射为一个或者多个路由终结点 ...