1. 通過(guò)getUserMedia調(diào)用設(shè)備的攝像頭(電腦、手機(jī)都可以,取決于瀏覽器對(duì)這個(gè)API的支持情況),并將資源放入video標(biāo)簽。
2. 將video內(nèi)的視頻資源通過(guò)canvas的drawImage API放入canvas里,這個(gè)canvas是不顯示的。
3. 將canvas的內(nèi)容轉(zhuǎn)換成base64編碼的webp格式的圖像(如果瀏覽器不支持這個(gè)格式,會(huì)fallback到png格式)放入img里,于是你就能看到你拍的照片了。
成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供紅花崗企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設(shè)公司、H5開(kāi)發(fā)、小程序制作等業(yè)務(wù)。10年已為紅花崗眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。
不廢話了,上代碼:
html5 capture test
var video = document.querySelector('video'); var canvas = document.querySelector('canvas'); var ctx = canvas.getContext('2d'); var localMediaStream = null; var snapshot = function () { if (localMediaStream) { ctx.drawImage(video, 0, 0); document.querySelector('img').src = canvas.toDataURL('p_w_picpath/webp'); } }; var sizeCanvas = function () { setTimeout(function () { canvas.width = video.videoWidth; canvas.height = video.videoHeight; img.width = video.videoWidth; img.height = video.videoHeight; }, 100); }; var btnCapture = document.getElementById('capture'); btnCapture.addEventListener('click', snapshot, false); navigator.webkitGetUserMedia( {video: true}, function (stream) { video.src = window.URL.createObjectURL(stream); localMediaStream = stream; sizeCanvas(); }, function () { alert('your browser does not support getUserMedia'); } );
不同瀏覽器對(duì)getUserMedia的支持情況不同,需要加上前綴,比如webkitGetUserMedia、mozGetUserMedia、msGetUserMedia,如果你想屏蔽這一問(wèn)題的話,可以這樣做:
// cross platforms var myGetUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
Chrome對(duì)file:///做了很多的限制,跨域就不說(shuō)了,geolocation也不能在本地下使用,這個(gè)getUserMedia也是。
這個(gè)sizeCanvas函數(shù)做的事情就是保證你拍到的照片的大小和攝像頭拍到的大小是一樣的,否則會(huì)出現(xiàn)拍到的照片只有攝像頭錄到的一部分畫(huà)面的情況。
http://blog.csdn.net/journey191/article/details/40744015