export async function imageSourceToDataUrl(source: string): Promise { if (source.startsWith("data:")) return source; const image = await loadImage(source); const canvas = document.createElement("canvas"); canvas.width = image.naturalWidth; canvas.height = image.naturalHeight; const context = canvas.getContext("2d"); if (!context) throw new Error("Unable to read selected image"); context.drawImage(image, 0, 0); return canvas.toDataURL("image/png"); } export function loadImageSize(source: string): Promise<{ w: number; h: number }> { return loadImage(source).then((image) => ({ w: image.naturalWidth, h: image.naturalHeight })); } function loadImage(source: string): Promise { return new Promise((resolve, reject) => { const image = new Image(); image.onload = () => resolve(image); image.onerror = () => reject(new Error("Failed to load image")); image.src = source; }); }