如何从js中的摄像头获取原始图像?

问题描述:

如何在左侧获取网络摄像头视频的格式与图像的右侧相同?如何从js中的摄像头获取原始图像?

有这个问题一段时间,并不知道它!

enter image description here

下面的代码:

document.getElementById('capture').addEventListener('click', function() { 
    var w = video.videoWidth; 
    var h = video.videoHeight; 
    canvas.width = w; 
    canvas.height = h; 
    context.drawImage(video,0,0,w,h); 
    canvas.style.display='block'; 

}); 

video.videoWidth不是视频的实际宽度,使你得到新的画布的不同比例。试试这个:

var videoRatio = video.videoWidth/video.videoHeight; 
var width = video.offsetWidth, height = video.offsetHeight; 
var elementRatio = width/height; 
if(elementRatio > videoRatio) width = height * videoRatio; 
else height = width/videoRatio; 

canvas.width = width; 
canvas.height = height; 
context.drawImage(video,0,0,width,height); 
canvas.style.display='block'; 
+0

nope相同的结果... – irredev

+1

等待!它实际上工作!这是我的错。我没有清除缓存。 – irredev

您在使用视频HTML元素的大小,而不是流的大小。这就是照片被拉伸的原因。您应该使用视频轨道的大小。

如果您在调用MediaDevices.getUserMedia时指定了它,请使用这些值。 否则从视频轨道进行检索(MediaStreamTrack.getSettings()