{"version":3,"file":"image.mjs","names":[],"sources":["../src/macros/env.ts","../src/std/image/mina_image.ts","../src/std/image/web_image.ts","../src/std/image/mod.ts"],"sourcesContent":["/**\n * @internal\n * 小游戏环境宏模块。\n */\n\n/**\n * 小游戏环境宏。\n *\n * 可通过打包工具在 build 时修改，如 esbuild webpack vite 等。\n */\ndeclare const __MINIGAME_STD_MINA__: boolean;\n\n/**\n * 如果在小游戏环境中返回 true，否则返回 false。\n */\nexport const IS_MINA = __MINIGAME_STD_MINA__;\n","/**\n * @internal\n * 小游戏平台的图片创建实现。\n */\n\n/**\n * 从 URL 创建图片对象。\n * @param url - 图片的 URL 地址。\n * @returns 返回小游戏平台的图片对象。\n */\nexport function createImageFromUrl(url: string): WechatMinigame.Image {\n    const img = wx.createImage();\n    img.src = url;\n\n    return img;\n}\n\n/**\n * 从本地文件路径创建图片对象。\n * @param filePath - 图片文件的本地路径。\n * @returns 返回小游戏平台的图片对象。\n */\nexport function createImageFromFile(filePath: string): WechatMinigame.Image {\n    return createImageFromUrl(filePath);\n}","/**\n * @internal\n * Web 平台的图片创建实现。\n */\n\nimport { readBlobFile } from 'happy-opfs';\nimport { Ok, type AsyncIOResult } from 'happy-rusty';\n\n/**\n * 从 URL 创建图片元素。\n * @param url - 图片的 URL 地址。\n * @returns 返回 HTML 图片元素。\n */\nexport function createImageFromUrl(url: string): HTMLImageElement {\n    const img = new Image();\n    img.src = url;\n\n    return img;\n}\n\n/**\n * 从本地文件路径创建图片元素。\n * @param filePath - 图片文件的本地路径。\n * @returns 返回包含 HTML 图片元素的异步结果。\n */\nexport async function createImageFromFile(filePath: string): AsyncIOResult<HTMLImageElement> {\n    const readRes = await readBlobFile(filePath);\n\n    return readRes.andThen(blob => {\n        const url = URL.createObjectURL(blob);\n\n        const img = new Image();\n        img.src = url;\n\n        img.addEventListener('load', () => {\n            URL.revokeObjectURL(url);\n        });\n        img.addEventListener('error', () => {\n            URL.revokeObjectURL(url);\n        });\n\n        return Ok(img);\n    });\n}","/**\n * 图片处理模块，提供从 URL 或文件创建图片的功能。\n * @module image\n */\nimport { Ok, type AsyncIOResult } from 'happy-rusty';\nimport { IS_MINA } from '../../macros/env.ts';\nimport {\n    createImageFromFile as minaCreateImageFromFile,\n    createImageFromUrl as minaCreateImageFromUrl,\n} from './mina_image.ts';\nimport {\n    createImageFromFile as webCreateImageFromFile,\n    createImageFromUrl as webCreateImageFromUrl,\n} from './web_image.ts';\n\n/**\n * 从URL创建图片。\n * @param url - 图片URL。\n * @returns Image对象。\n * @since 1.7.0\n * @example\n * ```ts\n * const img = createImageFromUrl('https://example.com/image.png');\n * img.onload = () => {\n *     console.log('图片加载完成', img.width, img.height);\n * };\n * ```\n */\nexport function createImageFromUrl(url: string): HTMLImageElement | WechatMinigame.Image {\n    return (IS_MINA ? minaCreateImageFromUrl : webCreateImageFromUrl)(url);\n}\n\n/**\n * 从文件创建图片。\n * @param filePath - 文件路径。\n * @returns 异步的Image对象。\n * @since 1.7.0\n * @example\n * ```ts\n * const result = await createImageFromFile('/path/to/image.png');\n * if (result.isOk()) {\n *     const img = result.unwrap();\n *     console.log('图片尺寸:', img.width, 'x', img.height);\n * }\n * ```\n */\nexport function createImageFromFile(filePath: string): AsyncIOResult<HTMLImageElement | WechatMinigame.Image> {\n    return IS_MINA\n        ? Promise.resolve(Ok(minaCreateImageFromFile(filePath)))\n        : webCreateImageFromFile(filePath);\n}"],"mappings":";;;;;;AAeA,MAAa,UAAU;;;;;;;;;;;;ACLvB,SAAgB,qBAAmB,KAAmC;CAClE,MAAM,MAAM,GAAG,YAAY;CAC3B,IAAI,MAAM;CAEV,OAAO;AACX;;;;;;AAOA,SAAgB,sBAAoB,UAAwC;CACxE,OAAO,qBAAmB,QAAQ;AACtC;;;;;;;;;;;;ACXA,SAAgB,qBAAmB,KAA+B;CAC9D,MAAM,MAAM,IAAI,MAAM;CACtB,IAAI,MAAM;CAEV,OAAO;AACX;;;;;;AAOA,eAAsB,sBAAoB,UAAmD;CAGzF,QAAO,MAFe,aAAa,QAAQ,EAAA,CAE5B,SAAQ,SAAQ;EAC3B,MAAM,MAAM,IAAI,gBAAgB,IAAI;EAEpC,MAAM,MAAM,IAAI,MAAM;EACtB,IAAI,MAAM;EAEV,IAAI,iBAAiB,cAAc;GAC/B,IAAI,gBAAgB,GAAG;EAC3B,CAAC;EACD,IAAI,iBAAiB,eAAe;GAChC,IAAI,gBAAgB,GAAG;EAC3B,CAAC;EAED,OAAO,GAAG,GAAG;CACjB,CAAC;AACL;;;;;;;;;;;;;;;;;;;;ACfA,SAAgB,mBAAmB,KAAsD;CACrF,QAAQ,UAAU,uBAAyB,qBAAA,CAAuB,GAAG;AACzE;;;;;;;;;;;;;;;AAgBA,SAAgB,oBAAoB,UAA0E;CAC1G,OAAO,UACD,QAAQ,QAAQ,GAAG,sBAAwB,QAAQ,CAAC,CAAC,IACrD,sBAAuB,QAAQ;AACzC"}