diff --git a/src/app/ar-fan-cam/ar-fan-cam.page.html b/src/app/ar-fan-cam/ar-fan-cam.page.html
index 385649e..38d5353 100644
--- a/src/app/ar-fan-cam/ar-fan-cam.page.html
+++ b/src/app/ar-fan-cam/ar-fan-cam.page.html
@@ -2,9 +2,10 @@
-
-

-
+
+

+
+
![]()
diff --git a/src/app/ar-fan-cam/ar-fan-cam.page.scss b/src/app/ar-fan-cam/ar-fan-cam.page.scss
index 5a46b9a..4f62787 100644
--- a/src/app/ar-fan-cam/ar-fan-cam.page.scss
+++ b/src/app/ar-fan-cam/ar-fan-cam.page.scss
@@ -48,6 +48,10 @@
left: 0;
}
+#result-canvas {
+ z-index: -1;
+}
+
.left-eye, .right-eye {
position: absolute;
width: 4px;
diff --git a/src/app/ar-fan-cam/ar-fan-cam.page.ts b/src/app/ar-fan-cam/ar-fan-cam.page.ts
index 2df503c..3023f20 100644
--- a/src/app/ar-fan-cam/ar-fan-cam.page.ts
+++ b/src/app/ar-fan-cam/ar-fan-cam.page.ts
@@ -1,6 +1,5 @@
import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';
import { detectSingleFace, loadFaceExpressionModel, loadFaceLandmarkModel, loadFaceLandmarkTinyModel, loadFaceRecognitionModel, loadSsdMobilenetv1Model, loadTinyFaceDetectorModel, TinyFaceDetectorOptions } from 'face-api.js';
-import domtoimage from 'dom-to-image';
import { Location } from '@angular/common';
@Component({
@@ -10,8 +9,11 @@ import { Location } from '@angular/common';
})
export class ArFanCamPage implements OnInit {
@ViewChild('videoElement', null) videoElement: ElementRef
;
+ @ViewChild('glassesElement', null) glassesElement: ElementRef;
+ @ViewChild('canvasElement', null) canvasElement: ElementRef;
mediaStream: MediaStream|null = null;
+ capturedImageStrings: Array = [];
glassProperties: {
[property: string]: any,
@@ -25,9 +27,7 @@ export class ArFanCamPage implements OnInit {
width = 360;
height = 270;
- temp: any;
-
-
+ temp: string;
stream: any;
constructor(
@@ -77,15 +77,38 @@ export class ArFanCamPage implements OnInit {
}
async capture() {
- let element: HTMLElement = document.querySelector('#container');
-
- await domtoimage.toPng(element).then((dataUrl) => {
- this.temp = dataUrl;
- console.log(dataUrl);
- })
- .catch((error) => {
- console.error('oops, something went wrong!', error);
- });
+ const canvas = this.canvasElement.nativeElement;
+ const context = canvas.getContext('2d');
+ context.drawImage(this.videoElement.nativeElement, 0, 0, canvas.width, canvas.height);
+
+ const getGlassesStyles = window.getComputedStyle(this.glassesElement.nativeElement);
+
+ const glassesTransformValue = getGlassesStyles.getPropertyValue("-webkit-transform") ||
+ getGlassesStyles.getPropertyValue("-moz-transform") ||
+ getGlassesStyles.getPropertyValue("-ms-transform") ||
+ getGlassesStyles.getPropertyValue("-o-transform") ||
+ getGlassesStyles.getPropertyValue("transform");
+
+ const glassesTransformMatrixValues = glassesTransformValue.split('(')[1].split(')')[0].split(',');
+
+ {
+ const a = Number(glassesTransformMatrixValues[0]);
+ const b = Number(glassesTransformMatrixValues[1]);
+ const c = Number(glassesTransformMatrixValues[2]);
+ const d = Number(glassesTransformMatrixValues[3]);
+ const e = Number(glassesTransformMatrixValues[4]);
+ const f = Number(glassesTransformMatrixValues[5]);
+
+ context.transform(a, b, c, d, e, f);
+ }
+
+ context.drawImage(this.glassesElement.nativeElement, 0, 0);
+
+ const dataURI = canvas.toDataURL('image/png');
+ this.capturedImageStrings.push(dataURI);
+
+ context.resetTransform();
+ context.clearRect(0, 0, window.innerWidth, window.innerHeight);
}
detectAndDrawFace = async () => {