@lobehub/ui
Version:
Lobe UI is an open-source UI component library for building AIGC web apps
1 lines • 2.48 kB
Source Map (JSON)
{"version":3,"file":"blobToPng.mjs","names":[],"sources":["../../src/utils/blobToPng.ts"],"sourcesContent":["/**\n * Convert image blob to PNG format.\n * Clipboard API only supports image/png and image/svg+xml.\n * WebP, JPEG and other formats need to be converted for clipboard copy.\n */\nexport const blobToPng = (blob: Blob): Promise<Blob> =>\n new Promise((resolve, reject) => {\n const img = new Image();\n const url = URL.createObjectURL(blob);\n\n img.onload = () => {\n URL.revokeObjectURL(url);\n const canvas = document.createElement('canvas');\n canvas.width = img.naturalWidth;\n canvas.height = img.naturalHeight;\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n reject(new Error('Canvas context not available'));\n return;\n }\n ctx.drawImage(img, 0, 0);\n canvas.toBlob(\n (pngBlob) => {\n if (pngBlob) {\n resolve(pngBlob);\n } else {\n reject(new Error('Failed to convert to PNG'));\n }\n },\n 'image/png',\n 1,\n );\n };\n\n img.onerror = () => {\n URL.revokeObjectURL(url);\n reject(new Error('Failed to load image'));\n };\n\n img.src = url;\n });\n\nconst CLIPBOARD_SUPPORTED_TYPES = ['image/png', 'image/svg+xml'] as const;\n\nexport const getClipboardBlob = async (\n blob: Blob,\n): Promise<{ 'image/png': Blob } | { 'image/svg+xml': Blob }> => {\n const type = (blob.type || '').toLowerCase();\n\n if (type === 'image/png' || type === 'image/svg+xml') {\n return { [type]: blob } as { 'image/png': Blob } | { 'image/svg+xml': Blob };\n }\n\n const pngBlob = await blobToPng(blob);\n return { 'image/png': pngBlob };\n};\n"],"mappings":";;;;;;AAKA,MAAa,aAAa,SACxB,IAAI,SAAS,SAAS,WAAW;CAC/B,MAAM,MAAM,IAAI,MAAM;CACtB,MAAM,MAAM,IAAI,gBAAgB,IAAI;CAEpC,IAAI,eAAe;EACjB,IAAI,gBAAgB,GAAG;EACvB,MAAM,SAAS,SAAS,cAAc,QAAQ;EAC9C,OAAO,QAAQ,IAAI;EACnB,OAAO,SAAS,IAAI;EACpB,MAAM,MAAM,OAAO,WAAW,IAAI;EAClC,IAAI,CAAC,KAAK;GACR,uBAAO,IAAI,MAAM,8BAA8B,CAAC;GAChD;EACF;EACA,IAAI,UAAU,KAAK,GAAG,CAAC;EACvB,OAAO,QACJ,YAAY;GACX,IAAI,SACF,QAAQ,OAAO;QAEf,uBAAO,IAAI,MAAM,0BAA0B,CAAC;EAEhD,GACA,aACA,CACF;CACF;CAEA,IAAI,gBAAgB;EAClB,IAAI,gBAAgB,GAAG;EACvB,uBAAO,IAAI,MAAM,sBAAsB,CAAC;CAC1C;CAEA,IAAI,MAAM;AACZ,CAAC;AAIH,MAAa,mBAAmB,OAC9B,SAC+D;CAC/D,MAAM,QAAQ,KAAK,QAAQ,GAAA,CAAI,YAAY;CAE3C,IAAI,SAAS,eAAe,SAAS,iBACnC,OAAO,GAAG,OAAO,KAAK;CAIxB,OAAO,EAAE,aAAa,MADA,UAAU,IAAI,EACN;AAChC"}