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

canvas的画布尺寸

这个设置的是canvas的画布尺寸

canvas.width = myVideo.videoWidth || 900; // 视频原生宽度

canvas.height = myVideo.videoHeight || 500; // 视频原生高度

这个设置的是canvas html 元素在页面上显示的尺寸

canvas.style.width = "900px"; // 保持显示尺寸

canvas.style.height = "500px"; // 保持显示尺寸

当canvas的画布尺寸(像素尺寸)过小的时候,画面就会很模糊

下面是使用canvas复制video画面的一个demo

<html> <head> <meta charset="UTF-8"> <link rel="icon" type="image/png" href="webrtc.png" /> <script src="webrtcconfig.js" ></script> <script src="webrtcstreamer.js" ></script> </head> <body> <!-- muted 静音播放 --> <!-- iOS 需要 playsinline 和 muted 才能自动播放 --> <!-- <video autoplay muted playsinline></video> --> <video id="my-video" style="width: 900px; height: 500px;" muted ></video> <canvas id="displayCanvas" style="width: 900px; height: 500px;"></canvas> </body> <script> const myVideo = document.getElementById('my-video'); const canvas = document.getElementById('displayCanvas'); const ctx = canvas.getContext('2d'); window.onload = function() { this.webRtcServer = new WebRtcStreamer("my-video", webrtcConfig.url); this.webRtcServer.connect("a12-篮球场-东北角", "", webrtcConfig.options); // setTimeout(()=>{ // console.log('=== 分辨率诊断 ==='); // console.log('Video 视频尺寸:', myVideo.videoWidth, '×', myVideo.videoHeight); // console.log('Video 显示尺寸:', myVideo.clientWidth, '×', myVideo.clientHeight); // console.log('Canvas 像素尺寸:', canvas.width, '×', canvas.height); // console.log('Canvas 显示尺寸:', canvas.clientWidth, '×', canvas.clientHeight); // console.log('设备像素比:', window.devicePixelRatio); // console.log('=================='); // }, 5000); // 开始绘制到画布 setTimeout(()=>{ drawVideoToCanvas(); }, 5000); } window.onbeforeunload = function() { this.webRtcServer.disconnect() } // 绘制视频到画布 function drawVideoToCanvas() { // console.log(myVideo.readyState); if (myVideo.readyState !== 4) { requestAnimationFrame(drawVideoToCanvas); return; } // 清除画布 ctx.clearRect(0, 0, canvas.width, canvas.height); // 将Canvas像素尺寸设置为与视频原生分辨率一致 canvas.width = myVideo.videoWidth || 900; // 视频原生宽度 canvas.height = myVideo.videoHeight || 500; // 视频原生高度 canvas.style.width = "900px"; // 保持显示尺寸 canvas.style.height = "500px"; // 保持显示尺寸 // 绘制视频到画布 ctx.drawImage(myVideo, 0, 0, canvas.width, canvas.height); // 添加边框效果 ctx.strokeStyle = '#4cc9f0'; ctx.lineWidth = 3; ctx.strokeRect(0, 0, canvas.width, canvas.height); // 继续绘制下一帧 requestAnimationFrame(drawVideoToCanvas); } </script> </html>
http://www.zskr.cn/news/139029.html

相关文章:

  • Draw.io Mermaid集成:开发团队的效率革命与智能绘图新范式
  • AcFunDown:零基础也能轻松掌握的A站视频下载神器
  • ESP32连接阿里云MQTT:PUBACK响应机制图解说明
  • 6、深入探索WinRT组件开发与异步操作
  • 如何快速上手Cimoc:安卓漫画阅读器的完整使用指南
  • Rhino.Inside.Revit终极指南:让BIM设计获得几何自由的秘密武器
  • LangFlow中的功能测试助手:自动生成测试用例
  • Diablo Edit2终极指南:全面掌控暗黑破坏神II角色定制
  • LangFlow中的订单履约助手:自动化处理发货流程
  • LangFlow中的安全审计助手:漏洞扫描与修复建议
  • Mixamo动画转换器终极指南:从Blender到Unreal Engine的完整工作流
  • 家庭自动化第一步:智能插座使用手把手教程
  • ImageGlass 完整指南:免费开源图像浏览新选择
  • UnblockNeteaseMusic终极指南:一键解锁网易云音乐灰色歌曲的完整教程
  • ImageGlass图片查看器:让Windows看图体验焕然一新的轻量级神器
  • LangFlow与剧本生成结合:自动编写故事情节与对白
  • LangFlow与运动计划制定结合:健身目标智能规划
  • 零门槛上手!AcFunDown:小白也能秒懂的A站视频下载神器
  • PatreonDownloader技术解析:从架构设计到实战应用
  • vJoy虚拟摇杆终极指南:从零开始构建虚拟游戏控制器
  • Cimoc开源漫画阅读器:技术架构深度解析与产品设计哲学
  • 为什么说Topit是macOS窗口管理的颠覆性创新?5个改变你工作方式的革命性功能
  • 手把手教程:如何解析串口字符型LCD的控制命令
  • 轻松突破加密壁垒:RPG Maker MV资源解密全攻略
  • 基于SpringBoot+Vue的私房菜定制上门服务系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】
  • 9、使用XAML构建用户界面
  • TrollInstallerX下载被拦截?3个简单步骤快速解决问题
  • 观影统计 - Cordova 与 OpenHarmony 混合开发实战
  • CH340 USB转串芯片无驱动?超详细版从下载到安装完整指南
  • 终极指南:RPG Maker MV解密工具完整使用教程