紹介内容
html5で追加された「WebRTC」の機能を使えば、ブラウザからカメラを起動して、写真を写すことができます。
今回はブラウザからカメラを起動して、写真を写して、jpeg画像としてダウンロードするところまで作ってみます。
概要
html5の「video」領域にWebカメラの映像を映し、それを「canvas」領域にコピーし、さらにそれを「img」領域に書き出します。
canvasは見せる必要がないため、隠します。
img領域を右クリックでダウンロードすれば、ファイルとして作成できるという流れです。
WebRTCの「getUserMedia」というメソッドによってカメラにアクセスします。
Chrome、Firefox、Operaなどが対応しています。一方でIEやSafariは未対応となっています。
ブラウザを使用しますが、http通信はlocalhostへのみ可能です。外部からアクセスして利用するにはhttps通信にしなければいけません。
ソース
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <style> #camera { width: 350px; height: 280px; transform: rotateY(180deg); } #img { width: 350px; height: 280px; } </style> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> <script> <!-- $(function() { //videoタグを取得 var video = document.getElementById('camera'); //カメラが起動できたかのフラグ var localMediaStream = null; //カメラ使えるかチェック var hasGetUserMedia = function() { return (navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia); }; //エラー var onFailSoHard = function(e) { console.log('Error!', e); alert("Error !"); }; if(!hasGetUserMedia()) { alert("Unsupported browser."); } else { window.URL = window.URL || window.webkitURL; navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia; navigator.getUserMedia({video: true}, function(stream) { video.src = window.URL.createObjectURL(stream); localMediaStream = stream; }, onFailSoHard); } $("#snap").click(function() { if (localMediaStream) { var canvas = document.getElementById('canvas'); //canvasの描画モードを2sに var ctx = canvas.getContext('2d'); var img = document.getElementById('img'); //videoの縦幅横幅を取得 var w = video.offsetWidth; var h = video.offsetHeight; //同じサイズをcanvasに指定 canvas.setAttribute("width", w); canvas.setAttribute("height", h); //canvasにコピー ctx.drawImage(video, 0, 0, w, h); //imgにpng形式で書き出し img.src = canvas.toDataURL('image/png'); } }); }); //--> </script> <body> <video id="camera" autoplay></video><br> <img id="img"> <div style="display:none"><canvas id="canvas"></canvas></div> </body> </html>