可以使用MediaStream API在javascript中捕获图像。但为了做到这一点,首先需要实例化一个视频对象,然后将一个框架绘制到画布中以获取图像。但遗憾的是,许多设备(例如手机)都不允许您以设备的完整原生分辨率捕获视频。例如,在我的手机上,最大图像分辨率大约为4000x3000,但最大视频分辨率仅为1920x1080。显然,捕获仅仅是可用分辨率的1/6的图像是不可接受的。
那么如何在设备上访问相机的全分辨率?
答案 0 :(得分:2)
您无法使用MediaStream API录制全分辨率图片,但可以使用Media Capture API 。
MediaStream API可以从摄像机流式传输数据,但视频分辨率为视频。这就是为什么你不能以高分辨率制作照片的原因。
另一种方法是使用Media Capture API。它只是通过向accept参数添加HTMLInput
来覆盖capture=camera
元素。结果是本机照片应用程序打开以拍照。此功能目前(2017年11月)only implemented in mobile browsers,因此如果您需要在桌面上支持此功能,则仍需要WebRTC作为后备。
工作示例
var myInput = document.getElementById('myFileInput');
function sendPic() {
var file = myInput.files[0];
// Send file here either by adding it to a `FormData` object
// and sending that via XHR, or by simply passing the file into
// the `send` method of an XHR instance.
console.log(file);
}
myInput.addEventListener('change', sendPic, false);
<input id="myFileInput" type="file" accept="image/*" capture="camera">
我觉得MediaStream API的当前情况是访问桌面摄像头而不是实际使用它来拍照。