您现在的位置是:网站首页> 编程资料编程资料
video结合canvas实现视频在线截图功能HTML5 Canvas 破碎重组的视频特效的示例代码前端canvas动画如何转成mp4视频的方法canvas像素点操作之视频绿幕抠图canvas绘制视频封面的方法详解基于canvas的视频遮罩插件canvas与html5实现视频截图功能示例Canvas获取视频第一帧缩略图的实现
2023-10-16
255人已围观
简介 这篇文章主要介绍了video结合canvas实现视频在线截图功能,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
给大家讲解下我前几天看到的一个有趣小demo:视频在线截图。以下是我修改和添加了新功能后的效果图:
是不是很酷,其实挺简单的,下面就给大家讲讲怎么弄哈。
这里主要分为三大块功能,首先是第一个:
利用URL对象获取视频链接并展示:
js的URL对象有个 createObjectURL 方法,它可以获取一个文件(File对象)的url,然后插入到 video 元素的 src 特性中,这样就可以实现视屏的展示了。当然如何获取File对象呢,方法有种,比如使用input元素,或者使用拖动的方式。一个完整的代码段:
document.querySelector('input[type="file"]').addEventListener('change',function () { document.querySelector('video').src = window.URL.createObjectURL(this.files[0]) })当然源码中我并不是这样写的,仅仅是为了给大家一个演示而已。关于URL更加具体的使用,大家可以看看这篇文章或者MDN。
利用canvas实现视频截图:
接下来就是关键步骤了,但也很简单,那就是使用 canvas 的 drawImage 方法,大家如果翻到高程三的第15.2.6节,就会发现 drawImage 的方法的使用描述得非常详细,但漏讲了一个,那就是 video 元素也可传入 drawImage 方法中,并且绘制图形。具体代码段:
var canvas = document.createElement("canvas"); var canvasCtx = canvas.getContext("2d"); var video=document.querySelector('video'); //坐原图像的x,y轴坐标,大小,目标图像的x,y轴标,大小。 canvasCtx.drawImage(video, 0, 0, videoWidth, videoHeight, 0, 0, imgWidth, imgHeight); //把图标base64编码后变成一段url字符串 var dataUrl = canvas.toDataURL("image/png"); //插入图片得src特性中 document.createElement('img').src=dataUrl;绘制完成图像后,再调用 canvas 的 toDataURl 方法把图像变成 base64 编码的url,就可插入到 img 元素中展示,一个缩略的图的制作便完成了。关于图片和base64的关系,具体的同学们可以看下这篇文章。
实现动画效果:
该动画实现的主要原理是:先在视频原处创建一张大小和视频一致的大图片,设置为绝对布局( position:absolut ),在实际放置缩略图处创建一张小图片,设置为不可见( visibility:hidden ),然后大图片通过 left 和 top 实现位移, width 和 height 实现缩小,至实际放置缩略图处,并形成动画效果。最后大图片删除,小图片显示即可。具体代码段:
function getOffset(elem) { var pos = {x: elem.offsetLeft, y: elem.offsetTop}; var offsetParent = elem.offsetParent; while (offsetParent) { pos.x += offsetParent.offsetLeft; pos.y += offsetParent.offsetTop; offsetParent = offsetParent.offsetParent; } return pos; }该函数是获取小图片距viewport(视口)的距离,并提供给大图片作为位移参数的,高程三的12.2.3节有段几乎一模一样的代码,并附有详细说明,以及替代方案 getBoundingClientRect 函数也有提到,具体的大家翻书看看哈。
下面的代码便是创建大图片和小图片并实现动画效果了。为了方便易懂,我这儿使用了JQuery
var $imgBig = $("
"); //设置大图片的初始位置,就是原视频处。 $imgBig.css({ position: "absolute", left: video.offsetLeft, top: video.offsetTop, width: video.offsetWidth+ "px", height: video.offsetHeight+ "px" }).attr("src", dataUrl); var $img = $("
"); $img.hide(); //获取小图片的距离参数,实现大图片的动画效果。 var offset = getOffset($img[0]); //添加动画效果 $imgBig.animate({ left: offset.x + "px", top: offset.y + "px", width: $img.width() + "px", height: $img.height() + "px" }, 500, function () { $img.show(); $imgBig.remove(); });
恩恩,主要的代码部分到这就讲完啦,当然具体的实现还有很多细节上的问题以及其他的功能可能没有展示,我就不一一说明了,具体的大家看完源码后可以再提问。
下面是我的源码地址,大家可以试试哈:
总结
以上所述是小编给大家介绍的video结合canvas实现视频在线截图功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
相关内容
- Html5移动端获奖无缝滚动动画实现示例Html5 滚动穿透的方法html5实现带视差的轮播图片滚动切换效果源码在线html5拼接轨道滚动钢珠游戏解决HTML5中滚动到底部的事件问题
- 使用Canvas操作像素的方法html5实现点击弹出图片功能html5 录制mp3音频支持采样率和比特率设置html5表单的required属性使用html5调用摄像头实例代码HTML5页面音频自动播放的实现方式Html5大屏数据可视化开发的实现html实现弹窗的实例HTML5来实现本地文件读取和写入的实现方法HTML 罗盘式时钟的实现HTML5简单实现添加背景音乐的几种方法
- html5触摸事件判断滑动方向的实现HTML5触摸事件实现移动端简易进度条的实现方法整理HTML5移动端开发的常用触摸事件HTML5触摸事件演化tap事件介绍HTML5触摸事件(touchstart、touchmove和touchend)的实现
- 基于 HTML5 的 WebGL 3D 版俄罗斯方块的示例代码基于 HTML5 WebGL 实现的垃圾分类系统HTML5 WebGL 实现民航客机飞行监控系统基于 HTML5 WebGL 实现的医疗物流系统
- html5-canvas中使用clip抠出一个区域的示例代码使用HTML5 Canvas API中的clip()方法裁剪区域图像
- HTML5 device access 设备访问详解html5实现点击弹出图片功能html5 录制mp3音频支持采样率和比特率设置html5表单的required属性使用html5调用摄像头实例代码HTML5页面音频自动播放的实现方式Html5大屏数据可视化开发的实现html实现弹窗的实例HTML5来实现本地文件读取和写入的实现方法HTML 罗盘式时钟的实现HTML5简单实现添加背景音乐的几种方法
- 详解canvas在圆弧周围绘制文本的两种写法HTML5 Canvas中使用用路径描画圆弧
- 全民飞机大战第一关通关攻略心得_全民飞机大战通关教程_手机游戏_游戏攻略_
- 全民飞机大战宠物资料介绍_全民飞机大战宠物有哪些_手机游戏_游戏攻略_
- 全民飞机大战天神祝福道具全面解析_全民飞机大战道具说明_手机游戏_游戏攻略_
