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

canvas-视频绘制

通过Canvas元素来实时绘制一个视频帧,并在视频帧上叠加一个图片的功能可以当作水印。

  1. 获取Canvas元素

    let canvas = document.getElementById('canvas')

    通过getElementById函数获取页面中ID为canvas的Canvas元素,并将其存储在变量canvas中。

  2. 检查Canvas是否支持getContext方法

    if(canvas.getContext){

    检查Canvas元素是否支持getContext方法,这是绘制图形和图像的基础。

  3. 获取2D渲染上下文

    let context = canvas.getContext('2d')

    通过Canvas的getContext方法获取一个2D渲染上下文(context),用于后续的绘图操作。

  4. 获取按钮元素

    let btn = document.getElementById('btn')

    通过getElementById函数获取页面中ID为btn的按钮元素,并将其存储在变量btn中。

  5. 创建视频元素并设置其源

    let video = document.createElement("video")
    video.src = './视频-css/横版-原神-昼.mp4'

    动态创建一个video元素,并设置其src属性为指定视频文件的路径。注意,这里使用的是相对路径。

  6. 创建并设置图片元素

    let img = new Image()
    img.src = "./视频-css/BgSub_favicon.png"

    通过new Image()创建一个新的图片元素,并设置其src属性为指定图片的路径。同样,这里使用的是相对路径。

  7. 为按钮添加点击事件监听器

    btn.onclick = function(){
    video.play()
    render()
    }

    为按钮添加了一个点击事件监听器,当按钮被点击时,会调用video.play()来播放视频,并调用render函数开始绘制。

  8. 绘制函数(render

    function render(){
    context.drawImage(video,0,0,600,300)
    context.drawImage(img,30,30,80,80)
    requestAnimationFrame(render)
    }

    render函数负责绘制操作。首先,使用context.drawImage方法将视频帧绘制到Canvas上,并指定其位置和大小(0,0,600,300)。然后,在同一Canvas上绘制图片,并指定其位置和大小(30,30,80,80)。最后,使用requestAnimationFrame(render)实现动画效果,即不断调用render函数以更新Canvas上的图像。

  •  let video = document.querySelector("video"),可以通过querySelector获取页面中的视频元素,上面的为动态创建视频元素。
  • 由于视频加载和播放可能需要一些时间,因此在实际应用中,可能需要添加一些额外的逻辑来处理视频未就绪或未播放完成的情况。例如,可以在绘制前检查视频的readyState属性,或者监听视频的loadedmetadatacanplaythrough等事件。
  • 代码中使用的相对路径(如'./视频-css/横版-原神-昼.mp4')需要确保与HTML文件相对的位置正确,否则视频将无法加载。

下面是效果图

http://www.lryc.cn/news/413008.html

相关文章:

  • 红酒与美食搭配:味觉的新探索
  • 大模型日报 2024-08-02
  • 【Pytorch】一文向您详细介绍 torch.sign()
  • 超级详细,如何手动安装python第三方库?
  • WebSocket协议测试
  • 浅谈【C#】代码注册COM组件
  • C++数据结构学习(顺序表)
  • springboot宠物用品商城系统-前端-计算机毕业设计源码74346
  • 【vue预览PDF文件的几种方法】
  • 学习安卓开发遇到的问题(未解决版,有没有人帮我看看,大哭,感谢)
  • C++必修:STL之vector的模拟实现
  • Unity Camera
  • CSS雷达光波效果(前端雷达光波效果)
  • 【C语言】【数据结构】冒泡排序及优化
  • 3种 Ajax 方式:原生、jQuery、axios
  • Node.js 根据表结构动态生成目标代码
  • 渗透测试实战—云渗透(AK/SK泄露)
  • 【机器学习】机器学习与医疗健康在疾病预测中的融合应用与性能优化新探索
  • MySQL(8.0)数据库安装和初始化以及管理
  • C# Web控件与数据感应之 TreeView 类
  • java使用责任链模式进行优化代码
  • 【人工智能】边缘计算与 AI:实时智能的未来
  • Day12--Servlet实现前后端交互(案例:学生信息管理系统登录页面)
  • Android 安装应用-准备阶段
  • 【JKI SMO】框架讲解(九)
  • Linux通过Docker安装Microsoft Office+RDP远程控制
  • 利用Qt实现调用文字大模型的API,文心一言、通义千问、豆包、GPT、Gemini、Claude。
  • 借助医疗保健专用的 LLM提高诊断支持与准确性
  • 微前端(qiankun)
  • 速通c++(周二)