No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 
 
 

71 líneas
3.0 KiB

  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>拍照2</title>
  6. </head>
  7. <body>
  8. <button id="take">拍照</button>
  9. <br />
  10. <video id="v" style="width: 640px;height: 480px;"></video>
  11. <canvas id="canvas" style="display:none;"></canvas>
  12. <br />
  13. <img src="http://placehold.it/640&text=Your%20image%20here%20..." id="photo" alt="photo">
  14. <script>
  15. !(function () {
  16. // 老的浏览器可能根本没有实现 mediaDevices,所以我们可以先设置一个空的对象
  17. if (navigator.mediaDevices === undefined) {
  18. navigator.mediaDevices = {};
  19. }
  20. if (navigator.mediaDevices.getUserMedia === undefined) {
  21. navigator.mediaDevices.getUserMedia = function (constraints) {
  22. // 首先,如果有getUserMedia的话,就获得它
  23. var getUserMedia = navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
  24. // 一些浏览器根本没实现它 - 那么就返回一个error到promise的reject来保持一个统一的接口
  25. if (!getUserMedia) {
  26. return Promise.reject(new Error('getUserMedia is not implemented in this browser'));
  27. }
  28. // 否则,为老的navigator.getUserMedia方法包裹一个Promise
  29. return new Promise(function (resolve, reject) {
  30. getUserMedia.call(navigator, constraints, resolve, reject);
  31. });
  32. }
  33. }
  34. const constraints = {
  35. video: true,
  36. audio: false
  37. };
  38. let videoPlaying = false;
  39. let v = document.getElementById('v');
  40. let promise = navigator.mediaDevices.getUserMedia(constraints);
  41. promise.then(stream => {
  42. // 旧的浏览器可能没有srcObject
  43. if ("srcObject" in v) {
  44. v.srcObject = stream;
  45. } else {
  46. // 防止再新的浏览器里使用它,应为它已经不再支持了
  47. v.src = window.URL.createObjectURL(stream);
  48. }
  49. v.onloadedmetadata = function (e) {
  50. v.play();
  51. videoPlaying = true;
  52. };
  53. }).catch(err => {
  54. console.error(err.name + ": " + err.message);
  55. })
  56. document.getElementById('take').addEventListener('click', function () {
  57. if (videoPlaying) {
  58. let canvas = document.getElementById('canvas');
  59. canvas.width = v.videoWidth;
  60. canvas.height = v.videoHeight;
  61. canvas.getContext('2d').drawImage(v, 0, 0);
  62. let data = canvas.toDataURL('image/webp');
  63. document.getElementById('photo').setAttribute('src', data);
  64. }
  65. }, false);
  66. })();
  67. </script>
  68. </body>
  69. </html>