You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
2.8 KiB

2 years ago
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <!--显示头像-->
  11. <div class="show-picture" id="picture_div" >
  12. <video id="video" class="picture-video" width="360" height="360" autoplay></video>
  13. <canvas id="canvas" class="picture-canvas" width="360" height="360"></canvas>
  14. <img id="headSculpture">
  15. <button type="button" class="layui-btn layui-btn-normal snap" id="snap">拍照</button>
  16. </div>
  17. <script language="JavaScript">
  18. //开启摄像头
  19. var MediaStreamTrack;
  20. var isPhotograph=true;
  21. function getMedia() {
  22. let constraints = {
  23. video: {width: 360, height: 360},
  24. audio: false,
  25. };
  26. //获得video摄像头区域
  27. let video = document.getElementById("video");
  28. //这里介绍新的方法,返回一个 Promise对象
  29. // 这个Promise对象返回成功后的回调函数带一个 MediaStream 对象作为其参数
  30. // then()是Promise对象里的方法
  31. // then()方法是异步执行,当then()前的方法执行完后再执行then()内部的程序
  32. // 避免数据没有获取到
  33. let promise = navigator.mediaDevices.getUserMedia(constraints);
  34. promise.then(function (MediaStream) {
  35. MediaStreamTrack=typeof MediaStream.stop==='function'?MediaStream:MediaStream.getTracks()[1];
  36. video.srcObject = MediaStream;
  37. video.play();
  38. isPhotograph = false
  39. });
  40. }
  41. //拍照
  42. function takePhoto() {
  43. if(isPhotograph){
  44. getMedia();
  45. clearCanvas();
  46. isPhotograph=false;
  47. }else{
  48. //获得Canvas对象
  49. let video = document.getElementById("video");
  50. let canvas = document.getElementById("canvas");
  51. let ctx = canvas.getContext('2d');
  52. ctx.drawImage(video, 0, 0,360, 360);
  53. MediaStreamTrack && MediaStreamTrack.stop();
  54. imgData = document.getElementById("canvas").toDataURL("image/jpeg");
  55. isPhotograph=true;
  56. }
  57. }
  58. document.getElementById("snap").addEventListener("click", takePhoto);
  59. /**
  60. * @description 重置canvas(清除照片)
  61. * @version 1.0
  62. * @returns
  63. */
  64. function clearCanvas() {
  65. var c = document.getElementById("canvas");
  66. var cxt = c.getContext("2d");
  67. c.height = c.height;
  68. }
  69. </script>
  70. </body>
  71. </html>