热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

canvas与h5如何实现视频截图功能-

这次给大家带来canvas与h5如何实现视频截图功能,canvas与h5实现视频截图功能的注意事项有哪些,下面就是实战案例,一起来看一下。
这次给大家带来canvas与h5如何实现视频截图功能,canvas与h5实现视频截图功能的注意事项有哪些,下面就是实战案例,一起来看一下。

这段时间一直在研究canvas,突发奇想想做一个可以截屏视频的功能,然后把图片拉去做表情包,哈哈哈哈哈哈~~

制作方法:

1.在页面中加载视频

在使用canvas制作这个截图功能时,首先必须保证页面上已经加载完成了这个视频,这样才能够方便的对其操作。如果使用下面直接嵌入

在我的那篇《html5与视频》中讲到,浏览器对视频的预加载progress以及load事件支持不同,会影响video的播放及其他事件的触发。所以我们在这里使用js构造video的方式来引入视频。

这种方式引入视频要注意,不能引入多个source,所以要先判断浏览器对视频格式的支持。

1.1使用video的canPlayType()方法判断支持格式

canPlayType()方法需要传入一个参数,这个参数就是video的格式,

常用值:video/ogg;

    video/mp4;

    video/webm;

或者包括编码器:

    video/ogg;codecs="theora,vorbis"

    video/mp4;codecs="avc1.4D401E, mp4a.40.2"

    video/webm;codesc="vp8.0, vorbis"

返回值:表示网页的支持级别:"probably"-最有可能支持(输入值带编码器的时候只返回这个);"maybe" - 可能支持;"" - (空字符串)不支持;

function videoType(video){
    var returnType='';
    if(video.canPlayType('video/mp4')=='probably'||video.canPlayType('video/mp4')=='maybe'){
      returnType= 'mp4';
    }else if(video.canPlayType('video/ogg')=='probably'||video.canPlayType('video/ogg')=='maybe'){
    returnType= 'ogg';   
   }else if(video.canPlayType('video/webm')=='probably'||video.canPlayType('video/webm')=='maybe'){
    returnType= 'webm';   
   }
   return returnType; }

这个函数可以判断浏览器对video支持的格式。

1.2使用js动态加载video标签

这里判断了浏览器的支持格式后,由于我用的是chrome,所以我的浏览器支持mp4格式的视频,然后我们动态创建一个video标签。

var videoElem;
var videop;
function createVideo(){
     videoElem=document.createElement("video");//创建video
     videop=document.getElementById("videopanel");//获取video的外层容器
     videop.appendChild(videoElem);
     var vtype=videoType(videoElem);//判断浏览器支持的格式
     if(vtype==""){
        videop.innerHtml('不支持video')
    }else{
        videoElem.setAttribute('src',"text."+vtype);
    }
}

由于这里我们要制作截图功能,单纯的video不具备截图的接口,所以我们要把它复制到canvas上,在canvas上播出这个视频,所以这里我们先把video给隐藏掉(display:none)。

2.使用canvas复制视频

现在video已经在浏览器上播放了,接下来我们把它复制到canvas里,首先建立canvas,然后得到画布context,这些就不说了。如何把video画在canvas上,这里我们要使用一个函数。drawImage函数的用法

1.drawImage(img,x,y):在画布的(x,y)这个位置画一个img;

2.drawImage(img,x,y,width,height):在画布的(x,y)这个位置画一个width宽,height高的img;

3.drawImage(img,sx,sy,swidth,sheight,x,y,width,height):在画布的(x,y)位置画一个img的(sx,sy)位置的swidth宽,sheight高的一块截图,画在画布上要缩放到width宽和height高。

以上就是drawImage的用法了,这个函数非常的强大。

回到做截图,我们现在已经在浏览器上创建好了画布--contextVideo,接着我们在这里把视频画出来:

contextVideo.drawImage(videoElem,0,0);

然后我们可以看到在canvas里画了一张图,但是视频是不断变化的,所以我们需要使用setInterval函数不断的吧video作为源来画图。

setInterval(function(){
contextVideo,drawImage(videoElem,0,0);
},100)

这里时间间隔的大小会影响到视频播放是否会卡。  

到这里我们就把video搬到canvas上展示了。接下来制作截图。

3.制作截图展示canvas面板

这里我们需要再在页面上画一个canvas画布--contextImg,然后再次利用drawImage方法,截图。

contextImg.drawImage(canvasVideo,0,0,canvasVideo.width,canvasVideo.height);

这段代码将第一个canvas画到了第二个canvas上。

4.制作截图按钮

制作一个按钮,然后绑定click事件,点击后就调用上一步的函数,这样就可以制作一个截图了。

当图截好后可以将图右键保存下来,然后倒入ps制作表情包了。

相信看了本文案例你已经掌握了方法,更多精彩请关注 第一PHP社区 其它相关文章!

推荐阅读:

分页查询的使用详解

JS的日期相关函数使用详解

以上就是canvas与h5如何实现视频截图功能的详细内容,更多请关注 第一PHP社区 其它相关文章!


推荐阅读
  • 本文介绍了Java的集合及其实现类,包括数据结构、抽象类和具体实现类的关系,详细介绍了List接口及其实现类ArrayList的基本操作和特点。文章通过提供相关参考文档和链接,帮助读者更好地理解和使用Java的集合类。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • 本文介绍了一种图片处理应用,通过固定容器来实现缩略图的功能。该方法可以实现等比例缩略、扩容填充和裁剪等操作。详细的实现步骤和代码示例在正文中给出。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 本文介绍了在Docker容器技术中限制容器对CPU的使用的方法,包括使用-c参数设置容器的内存限额,以及通过设置工作线程数量来充分利用CPU资源。同时,还介绍了容器权重分配的情况,以及如何通过top命令查看容器在CPU资源紧张情况下的使用情况。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 本文由编程笔记小编整理,主要介绍了使用Junit和黄瓜进行自动化测试中步骤缺失的问题。文章首先介绍了使用cucumber和Junit创建Runner类的代码,然后详细说明了黄瓜功能中的步骤和Steps类的实现。本文对于需要使用Junit和黄瓜进行自动化测试的开发者具有一定的参考价值。摘要长度:187字。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
  • 本文介绍了使用Word和Chrome翻译PDF文件的步骤,包括用Word打开PDF、另存为HTML文件以及用Chrome打开HTML并进行翻译的方法。通过这些步骤,您可以方便地将PDF文件翻译成其他语言。详细的操作步骤将在本文中进行说明。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
author-avatar
悲酥清风茶
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有