使用getuserMedia()Javascript拍摄的错误分辨率图像

时间:2019-09-11 09:00:16

标签: javascript html camera getusermedia

我想使用javascript getUserMedia函数从手机相机中截取屏幕截图,但分辨率非常差。

T*

没有错误代码,但分辨率不好,我无法阅读照片文字。 有没有一种方法可以从相机获得真实的图像质量?

1 个答案:

答案 0 :(得分:0)

MediaCapture

这就是您通过getUserMedia使用的内容。

如果您的相机仅支持1920x1080、1280x720和640x480分辨率,则Media Capture的浏览器实现可以模拟1280x720的480x640提要(请参见MediaStream)。通过测试(主要是Chrome),浏览器通常会将720缩小到640,然后裁剪中心。有时,当我使用虚拟相机软件时,我看到Chrome在不支持的分辨率周围添加了人工黑色填充。客户会看到一条成功消息和正确尺寸的提要,但一个人会看到质的下降。由于存在这种仿真,因此无法保证Feed正确或未按比例缩放。但是,通常它将具有要求的正确尺寸。

您可以了解约束here。基本上可以归结为:给我一个接近x的分辨率。然后,浏览器通过自己的实现确定拒绝约束并抛出错误,获取分辨率或模拟分辨率。

有关该设计的更多信息,请参见mediacapture规范。特别是:

  

RTCPeerConnection是一个有趣的对象,因为它起作用   同时作为网络的接收器和源   流。作为接收器,它具有源转换功能(例如,   降低比特率,放大/缩小分辨率并进行调整   帧速率),并且作为来源,可以更改自己的设置   跟踪来源。

这样做的主要原因是允许n个客户端访问相同的媒体源,但可能需要不同的分辨率,比特率等,因此尝试通过仿真/缩放/转换来解决此问题。对此不利的是,您永远不会真正知道源分辨率是什么。

ImageCapture

这可能是您的解决方案。

如果对60FPS视频的要求不是很高,并且兼容性还很强,则可以轮询ImageCapture来模拟摄像机并从摄像机接收到更清晰的图像。

您必须检查客户端支持,然后潜在地回退MediaCapture。

API可以控制相机的功能,例如缩放,亮度,对比度,ISO和白平衡。最重要的是,Image Capture允许您访问任何可用的设备相机或网络摄像头的全分辨率功能。以前在网络上拍摄照片的技术使用的是视频快照(将MediaCapture渲染到Canvas),其分辨率低于静态图像的分辨率。

https://developers.google.com/web/updates/2016/12/imagecapture

及其polyfill:

https://github.com/GoogleChromeLabs/imagecapture-polyfill