我正在使用angular 5示例项目,想要使用angular5组件结构构建屏幕截图或捕获屏幕视频的功能。
答案 0 :(得分:1)
创建一个组件
ng generate component capture
并粘贴以下代码以通过网络摄像头捕获图像
capture.component.html
<div id="app">
<div><video #video id="video" width="640" height="480" autoplay></video></div>
<div><button id="snap" (click)="capture()">Snap Photo</button></div>
<canvas #canvas id="canvas" width="640" height="480"></canvas>
<ul>
<li *ngFor="let capture of captures">
<img [src]="capture" style="widows: 200px;height:auto" />
</li>
</ul>
</div>
capure.component.ts
import { Component, OnInit, ViewChild, ElementRef } from '@angular/core';
@Component({
selector: 'app-capture',
templateUrl: './capture.component.html',
styleUrls: ['./capture.component.scss']
})
export class CaptureComponent implements OnInit {
captures: Array<any>;
constructor() {
this.captures = [];
}
ngOnInit() { }
async ngAfterViewInit() {
if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
let stream = await navigator.mediaDevices.getUserMedia({ video: true })
this.video.srcObject = stream;
}
}
capture() {
var context = this.canvas.getContext("2d").drawImage(this.video, 0, 0, 640, 480);
this.captures.push(this.canvas.toDataURL("image/png"));
}
@ViewChild("video") videoRef: ElementRef;
get video(): HTMLVideoElement {
return this.videoRef.nativeElement
}
@ViewChild("canvas") canvasRef: ElementRef;
get canvas(): HTMLCanvasElement {
return this.canvasRef.nativeElement
}
}
capure.component.css
body {
background-color: #F0F0F0;
}
#app {
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
#video {
background-color: #000000;
}
#canvas {
display: none;
}
li {
display: inline;
padding: 5px;
}
注意事项
如果由于未通过安全链接运行应用而遇到此类错误
然后执行此操作
有关更多详细信息,https://x-team.com/blog/webcam-image-capture-angular/
答案 1 :(得分:0)
对于屏幕截图,此库应能解决问题。
npm install angular-screenshot
基本用法示例: 将屏幕截图用作元素或属性,然后使用默认模板并覆盖默认的子元素
<button class="btn btn-fab" ng-class="{true: 'btn-danger', false: 'btn-default'}
[appCtrl.isBasicOpen]" ng-click="appCtrl.isBasicOpen = !appCtrl.isBasicOpen">
<i ng-if="!appCtrl.isBasicOpen" class="material-icons">crop</i>
<i ng-if="appCtrl.isBasicOpen" class="material-icons">close</i>
</button>
<!--screenshot-->
<screenshot is-open="appCtrl.isBasicOpen">
<div class="panel-body">
...
</div>
</screenshot>
使用目标参数在元素上设置屏幕截图部分
<div id="target1" class="panel panel-info">
...
<div class="panel-body">
<screenshot target="{{::'#target1'}}" is-open="appCtrl.target1Open" toolbox-options="appCtrl.target1Options"></screenshot>
...
</div>
</div>
'use strict';
(function () {
angular.module('app', ['angular-screenshot'])
.controller('AppController', ['$scope', appController]);
function appController($scope) {
var self = this;
self.target1Options = {
filename: 'target1.png',
downloadText: 'Download me',
cancelText: 'Close it!'
};
}
})()