33 lines
1.1 KiB
TypeScript
33 lines
1.1 KiB
TypeScript
|
import { IDimensions } from '../classes/Dimensions';
|
||
|
import { env } from '../env';
|
||
|
import { getContext2dOrThrow } from './getContext2dOrThrow';
|
||
|
import { getMediaDimensions } from './getMediaDimensions';
|
||
|
import { isMediaLoaded } from './isMediaLoaded';
|
||
|
|
||
|
export function createCanvas({ width, height }: IDimensions): HTMLCanvasElement {
|
||
|
|
||
|
const { createCanvasElement } = env.getEnv()
|
||
|
const canvas = createCanvasElement()
|
||
|
canvas.width = width
|
||
|
canvas.height = height
|
||
|
return canvas
|
||
|
}
|
||
|
|
||
|
export function createCanvasFromMedia(media: HTMLImageElement | HTMLVideoElement | ImageData, dims?: IDimensions): HTMLCanvasElement {
|
||
|
|
||
|
const { ImageData } = env.getEnv()
|
||
|
|
||
|
if (!(media instanceof ImageData) && !isMediaLoaded(media)) {
|
||
|
throw new Error('createCanvasFromMedia - media has not finished loading yet')
|
||
|
}
|
||
|
|
||
|
const { width, height } = dims || getMediaDimensions(media)
|
||
|
const canvas = createCanvas({ width, height })
|
||
|
|
||
|
if (media instanceof ImageData) {
|
||
|
getContext2dOrThrow(canvas).putImageData(media, 0, 0)
|
||
|
} else {
|
||
|
getContext2dOrThrow(canvas).drawImage(media, 0, 0, width, height)
|
||
|
}
|
||
|
return canvas
|
||
|
}
|