视频透明度抠图,视频需要一个灰度通道副本表示透明度

目前抖音等直播平台的礼物特效就是这个方法处理的

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>视频灰度通道抠图,视频包含灰度值表示透明的副本</title>
<style>
html, body {
::-webkit-scrollbar {
display: none;
};
background:rgba(0,0,0, 0); } div {
padding:0px;
margin: 0px;
} #c1 {
opacity: 0.001;
position:absolute;
left:0;
top:0;
z-index:0;
}
#c2 {
opacity: 1;
position:absolute;
left:0;
top:0;
z-index:3; } </style>
</head> <body style="background:url(bg.jpg)"> <div style="position:absolute;top:80px;left:0px;z-index:0;opacity:0.001">
<video width="555" height="777"
id="video"
src="media/789.dll"
controls="true"
crossorigin="anonymous" autoplay muted/>
</div> <canvas id="c1" width="1440" height="1280"></canvas>
<canvas id="c2" width="720" height="1280"></canvas> <input type='button' value="---change role---" style=" height:58px;position:absolute;top:122px;left:0px;z-index:99;"
onclick='setRole(805)'></input> <script> const tolerance = 5;
var roleId=1; function setRole(id){
var video = document.getElementById("video");
video.src='media/'+id+'.dll?'+new Date().getTime();
processor.c2.style.opacity=1;
// video.play();
//idle(); } function hideLayer()
{ processor.c2.style.opacity=0; } let processor = {
timerCallback: function() {
if (this.video.paused || this.video.ended) {
console.log("video.ended");
this.c2.style.opacity=0;
return;
}
this.computeFrame();
let self = this;
setTimeout(function () {
self.timerCallback();
}, 0);
}, doLoad: function() {
this.video = document.getElementById("video");
this.c1 = document.getElementById("c1");
this.ctx1 = this.c1.getContext("2d", { willReadFrequently: true });
this.c2 = document.getElementById("c2");
this.ctx2 = this.c2.getContext("2d", { willReadFrequently: true });
let self = this;
this.video.addEventListener("play", function() {
self.width = self.video.videoWidth ;
self.height = self.video.videoHeight;
self.c2.style.width= self.width / 2;
self.c1.style.width= self.width;
console.log("w=" + self.video.videoWidth); self.timerCallback();
}, false);
}, computeFrame: function() {
if(this.width<=0){
console.log("width:"+this.width);
return;
}
this.ctx1.drawImage(this.video, 0, 0, this.width, this.height);
let frameOpcity= this.ctx1.getImageData(this.width / 2, 0, this.width / 2, this.height);
let frame = this.ctx1.getImageData(0, 0, this.width / 2, this.height); let l = frame.data.length / 4; for (let i = 0; i < l; i++) {
let r = frame.data[i * 4 + 0];
let g = frame.data[i * 4 + 1];
let b = frame.data[i * 4 + 2];
let a= (r+ g+ b) / 3;
frameOpcity.data[i * 4 + 3] = a; } this.ctx2.putImageData(frameOpcity, 0, 0);
return; }
} document.addEventListener("DOMContentLoaded", () => {
processor.doLoad();
}); </script> </body>
</html>

  

h5 canvas 视频透明度抠图,视频需要一个灰度通道副本表示透明度的更多相关文章

  1. H5 的直播协议和视频监控方案

    H5 的直播协议和视频监控方案 一.流媒体主要实现方式 二.流媒体技术 2.1 流媒体 2.2 直播 2.3 流协议 2.3.1 HLS 协议 2.3.2 RTMP 协议 2.3.3 RTSP 协议 ...

  2. canvas与html5实现视频截图功能

    这段时间一直在研究canvas,突发奇想想做一个可以截屏视频的功能,然后把图片拉去做表情包,哈哈哈哈哈哈~~ 制作方法: 1.在页面中加载视频 在使用canvas制作这个截图功能时,首先必须保证页面上 ...

  3. paper 116:自然图像抠图/视频抠像技术梳理(image matting, video matting)

    1. Bayesian Matting, Chuang, CVPR 2001.http://grail.cs.washington.edu/projects/digital-matting/paper ...

  4. EasyNVR网页H5无插件播放摄像机视频功能二次开发之直播通道接口保活示例代码

    背景需求 随着雪亮工程.明厨亮灶.手机看店.智慧幼儿园监控等行业开始将传统的安防摄像头进行互联网.微信直播,我们知道摄像头直播的春天了.将安防摄像头或NVR上的视频流转成互联网直播常用的RTMP.HT ...

  5. PyQt+moviepy音视频剪辑实战2:一个剪裁视频文件精华内容留存工具的实现

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 PyQt+moviepy音视频剪辑实战 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.引言 ...

  6. 用H5 Canvas绘制一个仪表盘笔记

    前端有许多做数据可视化的图表插件,但有时候UI设计的图可能用现成的js插件无法定制或者比较麻烦(还不如自己造轮子来的快). 下面记录下用H5 canvas设计一个仪表盘代码: <!DOCTYPE ...

  7. moviepy音视频剪辑:视频基类VideoClip子类VideoFileClip、CompositeVideoClip、ImageSequenceClip介绍

    ☞ ░ 前往老猿Python博文目录 ░ 一.引言 在<moviepy音视频剪辑:moviepy中的剪辑相关类及关系>介绍了VideoClip主要有六个直接子类(VideoFileClip ...

  8. moviepy音视频剪辑:视频基类VideoClip子类DataVideoClip、UpdatedVideoClip、ImageClip、ColorClip、TextClip类详解

    ☞ ░ 前往老猿Python博文目录 ░ 一.概述 在<moviepy音视频剪辑:moviepy中的剪辑相关类及关系>介绍了剪辑相关类及关系,其中VideoClip有多个直接子类和间接子类 ...

  9. moviepy音视频剪辑:视频剪辑基类VideoClip的属性及方法详解

    ☞ ░ 前往老猿Python博文目录 ░ 一.概述 在<moviepy音视频剪辑:moviepy中的剪辑基类Clip详解>和<moviepy音视频剪辑:moviepy中的剪辑基类Cl ...

  10. C#控制台程序取得INSOYA视频区的视频的真实URL,视频标题,发布时间集合。

    准备工作 起因是因为这个网站:http://i.youku.com/kmsfan 这个是一个叫做冒险岛的游戏的资讯论坛,以前我经常在里面传视频,现在我不玩这个游戏了,但是很多玩家还是经常到我的网站里面 ...

随机推荐

  1. esp8266+MQTT+DHT11(温湿度计) platformio

    esp8266 + MQTT + DHT11(温湿度计) 连线 #include <Arduino.h> #include <ESP8266WiFi.h> #include & ...

  2. Next.js 从零入门到实战 3:2024最新完整教程 | 包含SSR、API路由和性能优化

    CSS样式学习 上一篇文章讲到如何创建一个脚手架程序,目前我们已经有了一个nextjs的基本框架,因此我们可以在这个基础上进行改造.打开我们项目中的page.tsx页面,这里是程序的主页面,也就是我们 ...

  3. 焕然一新!TinyVue 组件库 UI 大升级,更符合现代的审美!

    你好,我是 Kagol,个人公众号:前端开源星球. 自从 TinyVue 组件库去年开源以来,一直有小伙伴反馈我们的 UI 不够美观,风格陈旧,不太满足现阶段审美. "TinyVue 给我的 ...

  4. 一个强大、支持100多种格式.Net图片操作库

    更多开源项目请查看:一个专注推荐优秀.Net开源项目的榜单 我们在项目开发中,对图片的操作可以说是非常常见,比如图片大小改变.图片合并.格式转换.添加水印等,自己开发都需要费不少时间,所以今天给大家介 ...

  5. 使用yt-dlp下载youtube高清2k 60fps视频

    只演示windows下的操作,linux和mac应该差不多的命令行. 首先放上github仓库地址:https://github.com/yt-dlp/yt-dlp 它的介绍: 厉害啊,支持数千个网站 ...

  6. pnpm 是如何颠覆 npm 和 yarn 的?

    今天研究了一下 pnpm 的机制,发现它确实很强大,甚至可以说对 yarn 和 npm 形成了降维打击 . 我们从包管理工具的发展历史,一起看下到底好在哪里? npm2 在 npm 3.0 版本之前, ...

  7. java,属性覆盖,方法覆盖

    class Rootb {int x = 1;public Rootb(int i){}public int getI(){return x;}public void setI(int x){this ...

  8. java——棋牌类游戏斗地主(webddz1.0)之二

    package com.ddz; import java.io.ObjectInputStream; import java.net.DatagramSocket; /**************** ...

  9. Threejs的三维坐标系

    在三维空间中,所有的物体和相机都需要基于一个统一的坐标系来进行定位和操作.理解坐标系的基本概念,对于创建稳定.准确的三维效果至关重要. 基础 Three.js 采用的是右手坐标系,这意味着如果你将右手 ...

  10. springboot 实现通用责任链模式

    1.概述 在我们平时的工作中,填写分布填写数据,比如填入商品的基本信息,所有人信息,明细信息,这种情况就可以使用责任链模式来处理. 2.代码实现 2.1商品对象 public class Produc ...