当前位置: 首页 > 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.jsqmd.com/news/126576/

相关文章:

  • ZLUDA终极指南:在Intel GPU上运行CUDA应用的完整教程
  • AcFunDown:零基础也能轻松掌握的A站视频下载神器
  • 抖音无水印下载终极指南:轻松保存纯净高清视频
  • 5、深入探索WinRT:从基础到高级应用
  • Umi-OCR:高效文本识别解决方案
  • 快速掌握vue-esign电子签名组件的核心技巧
  • 5分钟精通文档转换神器:Mammoth.js让Word转HTML变得如此简单
  • Windows 11任务栏歌词插件:零基础快速上手安装指南
  • ESP32连接阿里云MQTT:PUBACK响应机制图解说明
  • ImageGlass终极指南:为什么这款轻量级图片查看器是Windows用户的最佳选择
  • Elasticsearch内存模型在K8s中的应用图解说明
  • 突破语言壁垒:jsPDF多语言PDF文档生成实战指南
  • 6、深入探索WinRT组件开发与异步操作
  • LangFlow与渗透测试结合:自动化红队演练
  • ESP32项目GPIO引脚配置:手把手讲解外设连接原理
  • OpenWrt路由器音乐解锁方案:3步实现全网音乐畅听
  • 抖音无水印视频下载工具完全使用教程:从入门到精通
  • 7、深入探索Windows 8 Store应用开发:异步操作、库使用与XAML UI构建
  • 京东抢购助手:5个实用技巧让你告别手慢无的烦恼
  • Rhino.Inside.Revit终极指南:让BIM设计获得几何自由的秘密武器
  • PDF文档智能转换利器:Puppeteer全流程指南
  • 如何快速上手Cimoc:安卓漫画阅读器的完整使用指南
  • 5个理由告诉你为什么需要「更好的鸣潮」:解放双手的自动剧情神器
  • LangFlow中的功能测试助手:自动生成测试用例
  • STM32驱动ST7789显示屏:告别卡顿,轻松实现流畅显示的实战指南
  • LangFlow中的订单履约助手:自动化处理发货流程
  • LangFlow中的安全审计助手:漏洞扫描与修复建议
  • Diablo Edit2终极指南:全面掌控暗黑破坏神II角色定制
  • Mixamo动画转换器终极指南:从Blender到Unreal Engine的完整工作流
  • 解放双手:智能剧情助手让鸣潮体验更纯粹