当前位置: 首页 > news >正文

vue、js截取视频任意一帧图片

在这里插入图片描述

html有本地上传替换部分,可以不看

原理:通过video标签对视频进行加载,随后使用canvas对截取的视频帧生成需要的图片

<template>
<el-row  :gutter="18"  class="preview-video"><h4>视频预览<span>系统默认选中第一帧为封面</span></h4><div class="screenshot-box"><video:class="`screenshot-video screenshot-video${id}`":src="videoUrl"controlscrossorigin="anonymous"/></div><div class="preview-btn"><el-button size="small" type="primary" class="set-btn" @click="setWidthHeight">截取封面</el-button><el-uploadaction="":key="componentImgKey":on-change="handleAddLocalImage"accept=".jpg,.png,.jpeg,.JPG,.PNG,.JPEG":auto-upload="false":show-file-list="false":limit="1":multiple="false"ref="uploads"><el-button @click.native="handleAddLocalImageBefore" size="small" type="primary">本地上传</el-button></el-upload></div><canvas:class="`myCanvas${id}`"class="myCanvas":width="isWidth":height="isHeight"/></el-row></template>
<script>
export default {data(){return {videoUrl:"",id: 0,isWidth: 320,isHeight: 180,imgSrc:"",},methods:{setWidthHeight() {if (true) {this.$nextTick((_) => {var v = document.querySelector(`.screenshot-video${this.id}`);this.isWidth = v.offsetWidth;this.isHeight = v.offsetHeight;this.cutPicture();});}},//截取当前帧的图片cutPicture() {if (process.browser) {this.$nextTick((_) => {var v = document.querySelector(`.screenshot-video${this.id}`);let canvas = document.querySelector(`.myCanvas${this.id}`);var ctx = canvas.getContext("2d");ctx.drawImage(v, 0, 0, this.isWidth, this.isHeight);var oGrayImg = canvas.toDataURL("image/png");this.imgSrc = oGrayImg;this.file_ext="png"let size=this.imageSize(oGrayImg)/1024/1024if(size>2){this.$message.error("图片大小不能超过2MB!")return}});}},imageSize(base64Str) {const indexBase64 = base64Str.indexOf('base64,');if (indexBase64 < 0) return -1;const str = base64Str.substr(indexBase64 + 6);return (str.length * 0.75).toFixed(2);},}
}
</script>
http://www.lryc.cn/news/401960.html

相关文章:

  • STM32智能家居系统教程
  • uniapp 开发 App 对接官方更新功能
  • 【PostgreSQL】PostgreSQL 教程
  • Qt类 | QLabel类详解
  • 深入剖析 Android 开源库 EventBus 的源码详解
  • End-to-End Object Detection with Transformers【目标检测-方法详细解读】
  • CSS3实现提示工具的渐入渐出效果及CSS3动画简介
  • JVM 垃圾回收算法
  • 吴恩达大模型系列课程《Prompt Compression and Query Optimization》中文学习打开方式
  • 2.javaWeb_请求和响应的处理(Request,Response)
  • 用C++、Python、Rust编写的有安全问题的B树
  • 问题:当直齿圆柱齿轮的齿数少于?时,可采用 变位的办法来避免根切。 #学习方法#其他
  • 请你谈谈:spring bean的生命周期 - 阶段2:Bean实例化阶段
  • 【开发指南】HTML和JS编写多用户VR应用程序的框架
  • C语言第6天作业 7月17日
  • 【BES2500x系列 -- RTX5操作系统】深入探索CMSIS-RTOS RTX -- 配置篇 -- flash的使用 --(八)
  • vue视频、图片自动轮播并伴随进度条
  • Android Studio环境安装指南
  • CentOS 7 初始化环境配置详细
  • 数据结构(双向链表)
  • 关于Kafka的17个问题
  • Redis 散列
  • ip地址错误无法上网怎么修复
  • 数据库管理的艺术(MySQL):DDL、DML、DQL、DCL及TPL的实战应用(上:数据定义与控制)
  • 成为CMake砖家(5): VSCode CMake Tools 插件基本使用
  • 【简洁明了】调节大模型的prompt的方法【带案例】
  • 【操作系统】文件管理——文件存储空间管理(个人笔记)
  • 微软GraphRAG +本地模型+Gradio 简单测试笔记
  • 数学建模-Topsis(优劣解距离法)
  • 嵌入式linux相机 转换模块