import { toDrawable } from "./toDrawable" /** * 图片改变尺寸,返回 Blob * @param imageSrc * @param w * @param h * @param options * @returns */ export async function imageResize( imageSrc: ImageData | Blob, w: number, h: number, options?: { format?: string quality?: number srcCanvas?: HTMLCanvasElement outCanvas?: HTMLCanvasElement sx?: number sy?: number sw?: number sh?: number method?: "pixelated" | "low" | "medium" | "high" // 返回 Canvas returnCanvas?: boolean } ): Promise { let outCanvas = options?.outCanvas || document.createElement("canvas") let outCtx = outCanvas.getContext("2d") outCanvas.width = w outCanvas.height = h if (options?.method === "pixelated") { outCtx.imageSmoothingEnabled = false } else { outCtx.imageSmoothingEnabled = true outCtx.imageSmoothingQuality = options?.method ?? "high" } let drawable = await toDrawable(imageSrc) outCtx.drawImage( drawable, options?.sx ?? 0, options?.sy ?? 0, options?.sw ?? drawable.width, options?.sh ?? drawable.height, 0, 0, w, h ) if (options?.returnCanvas) return outCanvas return new Promise((resolve) => { outCanvas.toBlob((blob) => resolve(blob), options?.format || "image/png", options?.quality) }) }