canvas快速实现视频的一键截图功能

视频的一键截图功能,在现在非常常见,但是,你知道怎么做到的吗??

canvas快速实现视频的一键截图功能_第1张图片

 

简单粗暴的原理 - 利用canvas的2d图进行绘制视频中的某一帧在进行保存

 

html:


    
    
    

 

js

    toCut() {
      var video = document.querySelector("#videoElement1"); //获取前台要截图的video对象,
      var canvas = document.querySelector("#nowC"); //获取前台的canvas对象,用于作图
      var ctx = canvas.getContext("2d"); //设置canvas绘制2d图,
      ctx.drawImage(video, 0, 0, canvas.width, canvas.height); //将video视频绘制到canvas中
      var images = canvas.toDataURL("image/png"); //canvas的api中的toDataURL()保存图像
      this.downloadImage(images);
    },

    //下载图片
    downloadImage(url) {
      var a = document.createElement("a");  //创造a标签进行下载
      a.setAttribute("href", url);
      a.setAttribute("target", "_blank");
      a.setAttribute("id", "vid");
      a.setAttribute("download", "image" + + new Date() + ".png");
      let canSupportDownload = "download" in a;
      // 防止反复添加
      if (document.getElementById("vid")) {
        document.body.removeChild(document.getElementById("vid"));
      }
       
      //添加a标签并手动触发点击事件下载
      if (canSupportDownload) {
        document.body.appendChild(a);
        a.click();
      } else {
        alert("不支持下载");
        window.open(url);
      }
    }

   

里面用到的知识点,是canvas的一些方法

    作为一个懒的码字的孩子,我直接上截图了

canvas快速实现视频的一键截图功能_第2张图片

 

  toDataURL:

canvas快速实现视频的一键截图功能_第3张图片

注意:请求视频如果是不同源,会存在跨域问题,所以需要解决跨域问题

canvas的相关跨域的解决,可以看一下这篇文章:https://www.zhangxinxu.com/wordpress/2018/02/crossorigin-canvas-getimagedata-cors/

 

 

kscreenshot插件

    利用kscreenshot这个插件也可以实现截图功能,

    先看看他的截图效果图 - 单纯的截图,功能还是很多 ,但由于自身bug的存在并不能实现对视频的截图,截图视频会变白

    canvas快速实现视频的一键截图功能_第4张图片

    使用的人提出了很多的问题,像下面这些

     canvas快速实现视频的一键截图功能_第5张图片

 

  由于该插件还存在很多问题,不推荐在项目中使用,但是不能否认,在某些项目中不会出现问题也是使用,所以还是讲一个怎么使用

 

第一步:下载安装

npm  install kscreenshot --save

  在安装时候,发现会有很多问题,有时候会覆盖掉项目原有的安装,所以安装的时候需要注意一下

 

第二步:使用,引入,在data初始换中实例化,切图

 

简单的就可以完成了,关于他的api,推荐大家自行看文档

https://gitee.com/kejiacheng/kscreenshot?utm_source=aladin&utm_campaign=repo

你可能感兴趣的:(js)