1. getUserMedia (この API に対するブラウザーのサポートに応じてコンピューターまたは携帯電話) を介してデバイスのカメラを呼び出し、リソースをビデオ タグに入れます。
2. canvasのdrawImage APIを介して、ビデオ内のvideoリソースをキャンバスに配置します。このキャンバスは表示されません。
3. キャンバスのコンテンツを Base64 でエンコードされた WebP 形式の画像に変換し (ブラウザーがこの形式をサポートしていない場合は、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 style="display: none;"></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('image/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'); } );
いくつかの注意事項:
ブラウザごとに getUserMedia のサポートが異なるため、webkitGetUserMedia、mozGetUserMedia、などのプレフィックスを追加する必要があります。 rメディア, この問題をブロックしたい場合は、次のようにすることができます:
// cross platforms var myGetUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
Chrome では、クロスドメインはもちろんのこと、file:/// に多くの制限が設けられており、地理位置情報はローカルで使用できません。ユーザーメディアを取得します。
この sizeCanvas 機能 は、撮影する写真のサイズがカメラでキャプチャされたサイズと同じであることを確認することです。そうでない場合、写真はカメラで記録された画像の一部にすぎません。
以上がHTML5のgetUserMediaを使った写真撮影例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。