【发布时间】:2016-06-30 10:15:23
【问题描述】:
我正在尝试生成视频的屏幕截图。目标是生成与视频第一帧相同的图像。但是,我遇到了结果图像被拉伸的问题。
此图像在左侧显示视频,在一开始就暂停 - 以及在右侧生成的图像:
注意到底部的灰色区域了吗?它已被拉伸到比视频更高的高度。
我正在使用以下代码生成屏幕截图:
示例标记:
<video id="video" height="300" width="320" preload="auto">
<source src="http://domain.com/video.mp4">
</video>
<canvas id="canvas" height="300" width="320"></canvas>
脚本:
// Grab an existing video element, 300px tall, 320px wide.
var video = document.getElementById('video');
// Grab existing canvas, 300px tall, 320px wide.
var canvas = document.getElementById('canvas');
// Wait until video has loaded
video.addEventListener('loadeddata', function() {
var context = canvas.getContext('2d');
// Render using same dimensions.
context.drawImage(video, 0, 0, 320, 300);
}, false);
有人可以告诉我如何避免这种拉伸吗?
【问题讨论】:
-
canvas.style.width和canvas.style.height属性只是页面显示属性,与画布像素分辨率无关。您需要将canvas.width和canvas.height设置为正确的分辨率 -
我直接在元素上设置宽度和高度。我已将用于创建示例屏幕截图的标记添加到问题示例代码中。
-
不,您必须将其设置为媒体的宽度和高度,视频元素的尺寸属性也仅显示尺寸。可以通过js用
video.videoWidth和video.videoHeight检索。
标签: javascript html canvas