【发布时间】:2015-10-20 14:22:50
【问题描述】:
我有下一个 html 模板:
<div className="page">
<video id="video" autoPlay/>
<canvas id="canvas"/>
<div class="btn-wrapper">
<button onClick={this._takePhoto}>Snap Photo</button>
</div>
</div>
这是我的应用程序的屏幕截图。在顶部您可以看到<video>,在底部可以看到<canvas/>(关注开发工具)。
问题:将<video/>图片绘制到<canvas/>我应该使用这个奇怪的系数:
const canvas = document.getElementById('canvas'),
context = canvas.getContext("2d"),
video = document.getElementById('video');
//QUESTION: why?!
const widthCoef = 2.1,
heigthCoef = 3;
context.drawImage(video,
0,
0,
video.clientWidth * widthCoef,
video.clientHeight * heightCoef,
0,
0,
canvas.clientWidth,
canvas.clientHeight);
问题: 如果<video/> 和<canvas/> 具有相同的宽度/高度,为什么我应该使用系数?
如果我做同样的事情但没有系数,比如
context.drawImage(video, 0, 0, video.clientWidth, video.clientHeight, 0, 0, canvas.clientWidth, canvas.clientHeight); //OR
context.drawImage(video, 0, 0, video.clientWidth, video.clientHeight, 0, 0, video.clientWidth, video.clientHeight); //OR
context.drawImage(video, 0, 0, canvas.clientWidth, canvas.clientHeight, 0, 0, canvas.clientWidth, canvas.clientHeight);
我得到一张放大的图片:
更新
我的新调整大小版本:
_resizeCanvas() {
const canvas = document.getElementById('canvas'),
video = document.getElementById('video');
const width = +window.getComputedStyle(video, null).getPropertyValue('width').replace('px', ''),
height = +window.getComputedStyle(video, null).getPropertyValue('height').replace('px', '');
video.width = width;
video.height = height;
canvas.width = width;
canvas.height = height;
},
更新 2 - 添加小提琴示例
【问题讨论】:
-
如何设置画布的宽度/高度?我敢打赌,您弄错了画布的像素宽度/高度(通过 canvas.width/canvas.height 访问)和画布的显示大小(通过 canvas.style.width / height 访问的 ccs 属性)。显示尺寸拉伸画布。除非您有充分的理由这样做(高 dpi 屏幕支持/像素化效果),否则不要更改画布 css w/h,只更改画布 w/h。
-
@GameAlchemist 请查看我在问题底部的更新部分。你的意思是一样的吗?
-
@GameAlchemist 在将
width/height直接设置为画布/视频后,他们停止工作 -
@OrestHera 该代码也不起作用
-
@OrestHera 我正在我的 PC 上的 Chrome 中进行测试
标签: javascript css html html5-canvas html5-video