import { CollageModes } from "../src/common/collages.ts"; import { CanvasRenderingContext2D, Image, } from "https://deno.land/x/canvas/mod.ts"; import { CollageContext, CollageImage } from "../src/common/types.ts"; import { init } from "https://deno.land/x/canvas@v1.3.0/mod.ts"; const canvasKit = await init(); export class ProxyImage implements CollageImage { private filepath: string; private _image: Image | undefined; constructor(filepath: string) { this.filepath = filepath; } public get image(): Image { if (!this._image) { const image = canvasKit.MakeImageFromEncoded(Deno.readFileSync(this.filepath)) if (!image) { throw Error(`Failed loading ${this.filepath}!`); } this._image = image; } return this._image; } public get width(): number { return this.image.width(); } public get height(): number { return this.image.height(); } } export type CastCanvasRenderingContext = & CanvasRenderingContext2D & CollageContext; export default class BrowserCollageModes extends CollageModes { drawImage( ctx: CastCanvasRenderingContext, image: ProxyImage, sx: number, sy: number, sw: number, sh: number, dx: number, dy: number, dw: number, dh: number, ): void { ctx.drawImage(image.image, sx, sy, sw, sh, dx, dy, dw, dh); } }