我的编程笔记记录我的编程笔记记录
首页
文章
分类
速记
相册
归档
RSS
首页
文章
分类
速记
相册
归档
RSS
  • 全部文章
  • 开发 (25)

    • 编程语言 (9)

      • css (1)

        • 【布局】css布局一本通【转载】
      • javascript (2)

        • canvas (2)

          • canvas处理视频
          • canvas 通过图像数据点阵重新绘制图像
      • php (3)

        • 调试 (1)

          • Xdebug的工作原理及在phpstorm下的配置
        • 源码 (1)

          • PHP实现ZIP流式打包下载(Zip on the fly)
        • composer常用指令
      • vuejs (3)

        • 2.x (1)

          • 封装一个三方组件的通用套路
        • vue中使用jsx开发组件
        • vite小技巧
    • 基础 (1)

      • patterns (1)

        • 结构型 (1)

          • 代理
    • 量化 (1)

      • qmt (1)

        • 大QMT关闭文件IO和Socket后,如何从外部获取特色数据和信号?如何得心应手的使用QMT呢?
    • 数据库 (4)

      • mongodb (1)

        • MongoDB快速入门
      • mysql (3)

        • 基础知识 (2)

          • mysql分页的两种方式
          • mysql取随机数字
        • sql性能监控工具
    • linux (1)

      • 常用 (1)

        • wget下载整个网站或者特定目录
    • tools (9)

      • 开发环境 (2)

        • vscode中的代码片段
        • linux下搭建samba用来和windows共享文件
      • 运维 (1)

        • 安装minio做图床
      • ide (2)

        • IDEA必装插件
        • IDEA文件模板变量
      • DOS常用指令
      • nginx 之 proxy_pass详解
      • nginx下websocket反向代理
      • github快速找项目

canvas处理视频

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<video controls src="video.ogv" id="v"></video>
<canvas id="mp4"></canvas>

<script>
    const v = document.getElementById("v")
    const canvas = document.getElementById("mp4")
    const ctx = canvas.getContext("2d")
    canvas.width = v.offsetWidth
    canvas.height = v.offsetHeight
    v.addEventListener("play", function () {
        var i = window.setInterval(function () {
            ctx.drawImage(v, 0, 0)
            const imgData = ctx.getImageData(0, 0, v.offsetWidth, v.offsetHeight).data

            ctx.fillStyle = "#ffffff"
            ctx.fillRect(0, 0, v.offsetWidth, v.offsetHeight)

            // 图片绘制 需要使用两个循环 一个绘制 x  一个绘制 y
            for (let y = 0; y < v.offsetHeight; y = y + 2) {
                for (let x = 0; x < v.offsetWidth; x = x + 1) {

                    let i = (x + y * v.offsetWidth) * 4
                    let r = i
                    let g = i + 1
                    let b = i + 2
                    let a = i + 3

                    if (r > 140 && r < 180 && b >20 && b<50) {
                        ctx.fillStyle = "#ffffff"
                    } else {
                        ctx.fillStyle = `rgba(${imgData[r]},${imgData[g]},${imgData[b]},${imgData[a]})`
                    }

                    ctx.fillRect(x, y, 1, 1)
                }
            }

            //当视频结束的时候去掉循环
            if (v.ended) {
                clearInterval(i)
            }
        }, 20);


    }, false)
</script>
</body>
</html>
最后更新: 2026/10/5 16:34
下一篇
canvas 通过图像数据点阵重新绘制图像
← 上一篇安装minio做图床下一篇 →canvas 通过图像数据点阵重新绘制图像

相关文章

  • canvas 通过图像数据点阵重新绘制图像开发 / 编程语言 / javascript / canvas