Vue+Video.js实现视频抽帧并返回抽帧图片Base64

 更新时间:2024年01月19日 09:26:41   作者:白野泽  
这篇文章主要为大家详细介绍了Vue如何利用Video.js实现视频抽帧并返回抽帧图片Base64,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下

1.vue

   // 抽帧 (url视频地址 time00:00:00:00时分秒帧 FPS视频帧率) 返回抽帧图片Base64
    getImgBase64(url,time,FPS) {
          var base64URL = ''
          let video = document.createElement('video')
          video.setAttribute('crossOrigin', 'anonymous') //处理跨域
          video.setAttribute('src', url)
          video.currentTime = this.timeToSeconds(time,FPS);
          video.addEventListener('loadeddata', function() {
          let canvas = document.createElement('canvas')
          //使用视频的宽高作为canvas、预览图的宽高
          let width = video.videoWidth 
          let height = video.videoHeight
          canvas.width = width
          canvas.height = height
          canvas.getContext('2d').drawImage(video, 0, 0, width, height) //绘制canvas
          base64URL = canvas.toDataURL('image/jpeg') //转换为base64,图片格式默认为png,这里修改为jpeg
          // console.log(base64URL.split(",")[1]);
          return base64URL.split(",")[1];
          })
    },
        //时分秒帧 转为秒
        timeToSeconds(time,FPS) {
            // 按小时、分钟、秒进行切割
            const [hours, minutes, seconds,frame] = time.split(':');
            // 计算总共的秒数
            var second = parseInt(hours) * 3600 + parseInt(minutes) * 60 + parseInt(seconds)+ (1/FPS) * parseInt(frame);
            //若秒数为0 防止黑帧 赋值0.1
            if(second == 0){
                second = 0.1;
            }
            return second;
        },

2.Java接口测试生成文件

    /**
     * 抽帧
     * @param jsonObject
     * @return
     */
    @PostMapping("/getFetchFrame")
    public AjaxResult getFetchFrame(@RequestBody JSONObject jsonObject) {
        String imgStr = jsonObject.getString("imgStr");
        OutputStream out = null;
        BASE64Decoder decoder = new BASE64Decoder();
        try {
            byte[] b = decoder.decodeBuffer(imgStr);
            //文件存储位置
            String uploadUrl = "C:\\Users\\cdv\\Desktop";
            File testFile = new File(uploadUrl);
            if (!testFile.exists()) {
                testFile.mkdirs();
            }
            String fileName = "frame" + System.currentTimeMillis() + ".jpg";
            String imgFilePath = uploadUrl + "/" + fileName;
            out = new FileOutputStream(imgFilePath);
            out.write(b);
            out.flush();
            return AjaxResult.success();
        } catch (Exception e) {
            logger.error("抽帧失败! error : " + e.getMessage());
            return AjaxResult.error("抽帧失败");
        } finally {
            try {
                if (out != null) {
                    out.close();
                }
            } catch (Exception e2) {
                logger.error("关闭输出流失败! error : " + e2.getMessage());
                return AjaxResult.error("关闭输出流失败");
            }
        }
    }

到此这篇关于Vue+Video.js实现视频抽帧并返回抽帧图片Base64的文章就介绍到这了,更多相关Vue Video.js视频抽帧内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue3.0实现复选框组件的封装

    vue3.0实现复选框组件的封装

    这篇文章主要为大家详细介绍了vue3.0实现复选框组件的封装代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • vue3+vite+TS中使用element-plus按需引入ElLoading、ElMessage样式失效解决

    vue3+vite+TS中使用element-plus按需引入ElLoading、ElMessage样式失效解决

    在项目中使用elementui确实是很方便的一件事,下面这篇文章主要给大家介绍了关于vue3+vite+TS中使用element-plus按需引入ElLoading、ElMessage样式失效解决的相关资料,需要的朋友可以参考下
    2023-02-02
  • vue-cli创建项目及项目结构解析

    vue-cli创建项目及项目结构解析

    上一篇我们安装了vue-cli,接下来我们就使用该脚手架进行创建项目,这篇文章主要介绍了vue-cli创建项目以及项目结构的相关资料,需要的朋友可以参考下面文章的具体内容
    2021-10-10
  • Vue路由切换和Axios接口取消重复请求详解

    Vue路由切换和Axios接口取消重复请求详解

    在web项目开发的过程中,经常会遇到客服端重复发送请求的场景,下面这篇文章主要给大家介绍了关于Vue路由切换和Axios接口取消重复请求的相关资料,需要的朋友可以参考下
    2022-05-05
  • vue多页面配置详情

    vue多页面配置详情

    这篇文章主要介绍了vue多页面配置,单页应用这个概念,是随着前几年 AngularJS、React、Ember 等这些框架的出现而出现的。在前面的前言内容里,我们在页面渲染中讲了页面的局部刷新,而单页应用则是使用了页面的局部刷新的能力,下面来看看详细内容,需要的朋友可以参考一下
    2021-11-11
  • vue中使用echarts并根据选择条件动态展示echarts图表

    vue中使用echarts并根据选择条件动态展示echarts图表

    虽然老早就看过很多echarts的例子, 但自己接触的项目中一直都没有真正用到过,直到最近才开始真正使用,下面这篇文章主要给大家介绍了关于vue中使用echarts并根据选择条件动态展示echarts图表的相关资料,需要的朋友可以参考下
    2023-12-12
  • 基于Vue3实现日历组件的示例代码

    基于Vue3实现日历组件的示例代码

    日历在很多地方都可以使用的到,这篇文章主要介绍了如何利用vue3实现简单的日历控件,文中通过示例代码讲解详细,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • vue video和vue-video-player实现视频铺满教程

    vue video和vue-video-player实现视频铺满教程

    这篇文章主要介绍了vue video和vue-video-player实现视频铺满教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • Vue2.0用 watch 观察 prop 变化(不触发)

    Vue2.0用 watch 观察 prop 变化(不触发)

    本篇文章主要介绍了Vue2.0用 watch 观察 prop 变化(不触发),非常具有实用价值,需要的朋友可以参考下
    2017-09-09
  • vue iview实现动态路由和权限验证功能

    vue iview实现动态路由和权限验证功能

    这篇文章主要介绍了vue iview实现动态路由和权限验证功能,动态路由控制分为两种:一种是将所有路由数据存储在本地文件中,另一种则是本地只存储基本路由,具体内容详情大家参考下此文
    2018-04-04

最新评论