face-api/src/dom/createCanvas.ts

32 lines
1.1 KiB
TypeScript
Raw Normal View History

2020-08-18 13:54:53 +02:00
import { IDimensions } from '../classes/Dimensions';
2020-12-19 17:46:41 +01:00
import { env } from '../env/index';
2020-08-18 13:54:53 +02:00
import { getContext2dOrThrow } from './getContext2dOrThrow';
import { getMediaDimensions } from './getMediaDimensions';
import { isMediaLoaded } from './isMediaLoaded';
export function createCanvas({ width, height }: IDimensions): HTMLCanvasElement {
2020-12-23 17:26:55 +01:00
const { createCanvasElement } = env.getEnv();
const canvas = createCanvasElement();
canvas.width = width;
canvas.height = height;
return canvas;
2020-08-18 13:54:53 +02:00
}
export function createCanvasFromMedia(media: HTMLImageElement | HTMLVideoElement | ImageData, dims?: IDimensions): HTMLCanvasElement {
2020-12-23 17:26:55 +01:00
const { ImageData } = env.getEnv();
2020-08-18 13:54:53 +02:00
if (!(media instanceof ImageData) && !isMediaLoaded(media)) {
2020-12-23 17:26:55 +01:00
throw new Error('createCanvasFromMedia - media has not finished loading yet');
2020-08-18 13:54:53 +02:00
}
2020-12-23 17:26:55 +01:00
const { width, height } = dims || getMediaDimensions(media);
const canvas = createCanvas({ width, height });
2020-08-18 13:54:53 +02:00
if (media instanceof ImageData) {
2020-12-23 17:26:55 +01:00
getContext2dOrThrow(canvas).putImageData(media, 0, 0);
2020-08-18 13:54:53 +02:00
} else {
2020-12-23 17:26:55 +01:00
getContext2dOrThrow(canvas).drawImage(media, 0, 0, width, height);
2020-08-18 13:54:53 +02:00
}
2020-12-23 17:26:55 +01:00
return canvas;
}