【javascript】PCのカメラを使って写真を撮る
2017年5月31日写真を撮る、と言っても、実際はvideoタグにカメラの映像を流して、瞬間を切り取るだけのやりかたです。
MediaDevices.getUserMedia()を利用する
まだ2017/05/31現在は実験段階らしいので利用する際は注意。
MediaDevices.getUserMedia()
使うのは、
・ htmlでvideoタグ設置
・ camera取得,videoタグのsrcに入れる
てな感じ。
videoタグ設置
普通にhtmlで下記のようにタグを準備しておく。
ポイントはautoplayにしておくこと。
勝手に再生してくれるので。
<video autoplay></video>
constraintsを設定
constraintsでvideoを使う設定。
なんかwidthとかheightとか細かい設定できるっぽいけど、とりあえずスルー(最後までスルー)。
var constraints = {
video: {
},
}
navigator.mediaDevices使ってstream情報を取得して、videoタグのsrcに入れる。
//デバイス情報ゲット
var item = navigator.mediaDevices.getUserMedia(constraints);
//ストリーム情報をビデオタグのsrcに設置
item.then( function(stream) {
var video = document.querySelector('video');
video.src = window.URL.createObjectURL(stream);
video.onloadedmetadata = function(e) {
//ロード完了後にカメラの設定
$(".js-btn").on("click",function(){
captureShot();
}.bind(this));
};
});
これでvideoタグに動画が勝手に流れる。
navigator.mediaDevices.getUserMedia(constraints);
‘MediaStreamConstraints オブジェクトは各種類に対するなんらかの要求に沿って、要求するメディアの種類を特定します。’
MDN
videoをキャプチャしてcanvasに描画
あとは流れているvideoタグの画面をcanvasタグに貼り付けて完了。
//キャプチャを
function captureShot(){
//videoタグ取得
var videocnt = $(".videoBox");
//canvas取得
var canvas = $("canvas")[0];
//cssで設定しててもよい
canvas.width = videocnt.width();
canvas.height = videocnt.height();
var cnt2d = $("canvas")[0].getContext('2d');
//canvasに書き込み
cnt2d.drawImage(videocnt[0], 0, 0);
}