vue 视频截屏

article/2025/9/17 17:40:48

video播放视频,一键截屏功能实现(2种方式)

1.canvas

<template><div class="hik-box"><canvas style="display:none;width:200px;height:200px" id="myCanvas"></canvas><video width="200" height="200" controls id="videos"><source src="./movie.mp4" type="video/mp4"></video><el-button class="btns" @click="screenShot">一键截屏</el-button></div>
</template>
<script>export default{data(){return{}},methods:{screenShot () {let video = document.getElementById('videos')let canvas = document.getElementById('myCanvas')// canvas.width = video.width// canvas.height = video.heightlet ctx = canvas.getContext('2d')// 处理toDataURL遇跨域资源导致的报错// ctx.drawImage(video, 0, 0, video.width, video.height) 或ctx.drawImage(video, 0, 0, 350, 300)var imgbase64 = canvas.toDataURL('image/png')if (imgbase64) this.baseToFile(imgbase64)}},
}
</script>
<style scoped></style>

2.html2canvas

1.下载html2canvas

npm i html2canvas --save

2.页面引入

<template><div class="hik-box"><video width="200" height="200" controls id="videos"><source src="./movie.mp4" type="video/mp4"></video><el-button class="btns" @click="screenShot">一键截屏</el-button></div>
</template><script>
import html2canvas from 'html2canvas'
export default{data(){return{}},methods:{// 截屏screenShot () {let video = document.getElementById('videos')let canvas = document.getElementById('myCanvas')html2canvas(video, { allowTaint: true,useCORS: true}).then((canvas) => {// base64const capture = canvas.toDataURL('image/png')// 下载方法1,浏览器弹出下载文件提示const saveInfo = {// 导出文件格式自己定义'download': '文件名' + '.png','href': capture}const element = document.createElement('a')element.style.display = 'none'for (const key in saveInfo) {element.setAttribute(key, saveInfo[key])}document.body.appendChild(element)element.click()setTimeout(() => {document.body.removeChild(element)}, 300)// this.downFile(capture) 下载方法2},// 下载方法2downFile(base){const base64List = base.split(',')[1]const raw = window.atob(base64List)const rawLength = raw.lengthconst uInt8Array = new Uint8Array(rawLength)for (let i = 0; i < rawLength; ++i) {uInt8Array[i] = raw.charCodeAt(i)}// 下载到本地const fileName = this.fileName || '截屏' + '.png'const aLink = document.createElement('a')const evt = document.createEvent('HTMLEvents')evt.initEvent('click', true, true)aLink.download = fileNameaLink.href = URL.createObjectURL(blob)aLink.click()},// 接口上传uploadFile(){// 若需上传,将base64转为file文件const blob = new Blob([uInt8Array], { type: 'image/png' })let fileOfBlob = new File([blob], '文件名' + '.png')}var formData = new FormData()formData.append('file', fileOfBlob)// 接口上传download(file).then(res => {// res,dosomething})}}
</script>
<style scoped>
</style>

3.tips

<1> video引入的视频地址要保证不跨域,这样才可以成功有图片,不然会出现报错toDataURL的相关报错


http://chatgpt.dhexx.cn/article/W8sHWr4e.shtml

相关文章

Vue视频学习

黑马程序员vue前端基础教程-4个小时带你快速入门vue_哔哩哔哩_bilibili vue的el挂载点 id选择器&#xff0c;class选择器&#xff0c;元素选择器&#xff0c;推荐使用id选择器&#xff0c;因为id选择器唯一 vue的数据对象 vue开发网页&#xff1a; v-text v-html:解析返回的…

Vue2视频播放(Video)

Vue3视频播放&#xff08;Video&#xff09; 可自定义设置以下属性&#xff1a; 视频文件url&#xff08;src&#xff09;&#xff0c;必传&#xff0c;默认 &#xff0c;支持网络地址https和相对地址require(...) 视频封面url&#xff08;poster&#xff09;&#xff0c;默…

vue实现视频播放器功能,你学会了吗

&#x1f48c; 作者简介 &#x1f4d6; 个人介绍&#xff1a;小伙伴们&#xff0c;大家好&#xff01;我是水香木鱼&#xff0c;【前端领域创作者】&#x1f61c;&#x1f4dc; CSDN主页&#xff1a;水香木鱼&#x1f4d1; 个人博客&#xff1a;陈春波&#x1f3a8; 系列专栏&…

测试开发工程师成长日记001 - 敏捷测试、CI/CD/CT、DecOps的一些介绍

始终都没有很坚定想去做一份职业&#xff0c;大概就是缺少对互联网的热爱与坚持&#xff0c;对于我个人而言&#xff0c;大概需要的是简单而明确的方向&#xff0c;比如考研&#xff1a;选中一个学校并开始各个科目的学习和延伸。但是&#xff0c;找工作完全不一样&#xff0c;…

浅谈弱网测试及QNET

最近工作中需要进行弱网测试&#xff0c;所以在此将自己遇到的一些问题记录一下。本文是基于QNET进行的弱网测试。**首先弱网测试是什么&#xff1f;**模拟各种弱网环境&#xff0c;借助丢包、延时等弱网场景测试对弱网的处理机制&#xff0c;以游戏为例&#xff0c;就是保证前…

shell脚本测试

目录 test命令进行测试 1.比较大小 2.关于文件的权限检测&#xff08;-x常用&#xff09; 3.1测试文件是否存在&#xff08;-f&#xff0c;-d&#xff09; 4.多种条件的判断&#xff08;-a -o常用&#xff09; 5.判断字符串是否相等 expr命令 数值比较符号 逻辑判断脚本…

【Cmake】Ctest测试工具

目录 前言 一、初识CTest 二、使用方法 三、完整的简单测试工程 附录 附录一 cmake命令 enable_testing add_test 前言 原文&#xff1a;CTest - https://www.cnblogs.com/457220157-FTD/p/4139149.html 一、初识CTest CTest是CMake集成的一个测试工具&#xff0c;在使…

软件测试常见面试题

1、软件的含义 程序、数据以及相关文档的集合。 2、测试与调试的区别是什么&#xff1f; 测试是测试人员进行&#xff0c;主要目标是发现、报告、跟踪缺陷&#xff1b; 调试是开发人员进行&#xff0c;主要目标是定位缺陷位置、分析缺陷原因、修复缺陷。 3、IEEE是什么意思…

Web服务稳定性测试 负载测试 可靠性测试 方案 测试报告

注&#xff1a; 1. 程序员做的测试 2. 测试报告文档原稿在上传审核中&#xff0c;请等待 审核好了&#xff1a;https://download.csdn.net/download/yiquan_yang/12694138 1 概述 1.1 背景 系统的稳定性是系统长期稳定运行能力&#xff0c;需要时间累积才能度量。平台的某些问…

NFC测试

NFC功能点介绍&#xff1a; NFC英文全称Near Field Communication&#xff0c;近距离无线通信。 NFC采用主动和被动两种读取模式&#xff0c;NFC应用模式分为三种&#xff1a; 1、NFC卡模式&#xff08;被读模式&#xff0c;手机终端可以模拟成为一张普通的非接触卡被pos机读取…

Python 接口并发测试详解

一、接口并发测试简介 1、性能测试简介 性能测试是通过自动化测试工具模拟多种正常、峰值及异常负载条件对系统的各项性能指标进行的测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,…

jmeter测试工具

文章目录 参考文章jmeter接口验签tomcat最大连接数jmeter参数彻底理解jmeter的ramp-up参数总结说明 持续时间的使用场景彻底理解ramp up2循环次数ramp-up线程数循环次数&#xff08;永远&#xff09;持续时间同步器里面的Timeout in milliseconds参数线程组参数 版本缺陷记录jm…

点餐系统测试

一、设计测试用例 二、提交BUG a)BUG 一 标题:兼容性差&#xff0c;只能在Chrome浏览器和火狐浏览器上使用 1.版本号&#xff1a;V0009 2.测试环境&#xff1a;Chrome 浏览器 版本号 96.0.4664.45 火狐 浏览器 版本号 97.0.1 操作系统&#xff1a;win10 3.测试数据…

接口 测试

一.接口概念 1.什么是接口(API) 接口:接口是为了提供一种服务 所有的接口统称为API,接口分为内部接口和外部接口 外部接口:测试被测系统和外部系统之间的接口 测试内部接口: 1.内部接口提供内部系统使用:开发人员自己开发的对自身系统提供的接口) 2.内部接口提供外部系统使用:…

Visual Studio 2017 15.8 正式发布,测试速度提高 82%

Visual Studio 2017 15.8 版本已正式发布&#xff1a; 发行说明&#xff1a;https://docs.microsoft.com/zh-cn/visualstudio/releasenotes/vs2017-relnotes#15.8下载地址&#xff1a;https://visualstudio.microsoft.com/downloads/ 安装 现可选择在开始安装之前下载所有安装文…

跟LintCode的算法题杠上了(82落单的数)

前言 今天闲来无事准备刷个算法题&#xff0c;缓解一下办公室尴尬的气氛&#xff0c;放松一下&#xff0c;谁知我竟然跟这题杠上了&#xff0c;我必须得好好研究一下&#xff0c;哈哈 题目 点击进入lintcode&#xff0c;第82题落单的数 给出 2 * n 1个数字&#xff0c;除其…

扫码登陆

一个扫码登录的流程图记录一下

PC网站实现微信扫码登录功能(二)

上篇我们介绍了怎么申请账号以及最后拿到appId和appSecret,如果有不清楚的可以看一下 PC网站实现微信扫码登录功能&#xff08;一&#xff09; 下面我就来说一下怎样在PC端怎么实现扫码登录功能。 一、进入官方文档网站 准备工作 | 微信开放文档 其实官网对过程描述的已经…

微信扫描二维码快速登录网站

在近期的一个项目中用到了微信扫描注册、登录网站功能所以整理了下希望对读者有帮助。 首先&#xff0c;你需要有一个没有绑定微信、微信公众平台的邮箱注册成为微信开放平台开发者&#xff0c;在管理中心创建移动应用、或者网站应用获得appid和AppSecret&#xff0c;申请微信…