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属性,或者监听视频的loadedmetadata、canplaythrough等事件。
  • 代码中使用的相对路径(如'./视频-css/横版-原神-昼.mp4')需要确保与HTML文件相对的位置正确,否则视频将无法加载。

下面是效果图

相关推荐
ck0135797 小时前
视频片段提取与视频修剪的区别:多时间段选择及导出流程
人工智能·音视频·视频
沐飞工具箱7 小时前
游戏、漫画、视频里的外语怎么实时翻译?从 OCR + AI 原理聊聊 VoriTrans 屏幕翻译
人工智能·游戏·实时互动·音视频·自动翻译
小豆庄19 小时前
监控视频脱敏的追踪漂移与ID撞号陷阱
目标跟踪·ffmpeg·音视频·视频·敏捷流程
原子延迟1 天前
批量压缩视频会变大?HandBrake等3款(2026)
图像处理·人工智能·计算机视觉·音视频
TST-魚爷1 天前
腾讯会议双机位同屏:前后两个摄像头画面合并显示方案(易视讯)
电脑·音视频·腾讯会议·zoom会议
闭包不眠1 天前
批量压缩视频先分组,HandBrake等3种方法(2026)
图像处理·人工智能·计算机视觉·音视频
视频技术分享1 天前
远程会诊产品设计复盘:音视频架构拆解与四大避坑
架构·音视频
听我哔哔1 天前
口播视频唇形总对不上,Seedance 2.5在zeekeAI里同步
人工智能·音视频
伯奥克客服1 天前
2026年视频矩阵厂家技术评估:从EDID到控制协议开放度的六维筛选法
线性代数·矩阵·音视频
指针向南1 天前
批量压缩视频有文件没变小?HandBrake等3款对比
图像处理·人工智能·计算机视觉·音视频