溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

通過(guò)HTML5的getUserMedia實(shí)現(xiàn)拍照功能

發(fā)布時(shí)間:2020-02-28 00:44:04 來(lái)源:網(wǎng)絡(luò) 閱讀:702 作者:pmlinjian 欄目:移動(dòng)開(kāi)發(fā)

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里,于是你就能看到你拍的照片了。

不廢話了,上代碼:

HTML

<!doctype html>
<html>
<head>
    <title>html5 capture test</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <video autoplay></video>
    <img src="">
    <canvas ></canvas>
    <button id="capture">snapshot</button>


    <script src="index.js"></script>
</body>
</html>

JS

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');
    }
);

幾個(gè)注意事項(xiàng):

  • 不同瀏覽器對(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)拍到的照片只有攝像頭錄到的一部分畫面的情況。


http://blog.csdn.net/journey191/article/details/40744015

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI