angular 笔记 之 页面调用摄像头拍照

直接上代码:
html:

<video *ngIf="!avatarUrl" id="video" width="360" height="540" autoplay="">视频流不可用.</video>
<img style="width: 360px;" *ngIf="avatarUrl" [src]="avatarUrl" class="avatar" />
<canvas id="canvas" [style.display]="'none'">
</canvas>

ts:

avatarUrl;
mediaStream: MediaStream;
/**打开摄像头 */
  getUserMedia() {
    // 选择最接近360x540的分辨率
    var constraints = { video: { width: 360, height: 540 } };
    navigator.mediaDevices
      .getUserMedia(constraints)
      .then(mediaStream => {
        this.mediaStream = mediaStream;
       
        /* var video = document.querySelector('video'); */
        var video: any = document.getElementById('video');
        video.srcObject = this.mediaStream;
        video.onloadedmetadata = function(e) {
          video.play();
        };
      })
      .catch(function(err) {
        console.log(err.name + ': ' + err.message);
      }); // 最后一定要检查错误。
  }

  /**关闭摄像头 */
  closeCamera() {
    this.mediaStream.getTracks().forEach(track => track.stop());
  }

  /**照相 */
  takepicture() {
    var canvas = document.querySelector('canvas');
    var video = document.querySelector('video');
    var context = canvas.getContext('2d');
    canvas.width = 360;
    canvas.height = 540;
    /**
     * 在画布上定位图像,并规定图像的宽度和高度
     * 参数1:图像来源
     * 参数2: 在画布上放置图像的 x 坐标位置。
     * 参数3: 在画布上放置图像的 y 坐标位置。
     * 参数4: 图像的宽
     * 参数5: 图像的高
     */
    context.drawImage(video, 0, 0, 360, 540);
	// data就是拍出照片的base64
    var data = canvas.toDataURL('image/png');
    this.avatarUrl = data;
  }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值