From 80d12a2dd85f49b4ab1080805e8e2aaab19a8815 Mon Sep 17 00:00:00 2001 From: gunshiz Date: Tue, 22 Sep 2026 22:53:59 +0700 Subject: [PATCH] fix(image-generator) : preserve uploaded images in exports --- components/admin/overview-image-generator.tsx | 32 ++++++------------- 1 file changed, 10 insertions(+), 22 deletions(-) diff --git a/components/admin/overview-image-generator.tsx b/components/admin/overview-image-generator.tsx index 6f1abaa..89cdd60 100644 --- a/components/admin/overview-image-generator.tsx +++ b/components/admin/overview-image-generator.tsx @@ -791,18 +791,6 @@ export function OverviewImageGenerator({ }; const displayRole = role === "Custom" ? customRoleText.trim() || "Custom" : role; - useEffect( - () => () => { - if (backgroundUrl) URL.revokeObjectURL(backgroundUrl); - }, - [backgroundUrl], - ); - useEffect( - () => () => { - if (artworkUrl) URL.revokeObjectURL(artworkUrl); - }, - [artworkUrl], - ); function detectArtworkTheme( source: CanvasImageSource, @@ -932,7 +920,13 @@ export function OverviewImageGenerator({ if (target === "artwork") { detectArtworkTheme(image, image.naturalWidth, image.naturalHeight); setCharacterScale(100); - setArtworkUrl(url); + setArtworkUrl(await new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.onload = () => resolve(reader.result as string); + reader.onerror = reject; + reader.readAsDataURL(file); + })); + URL.revokeObjectURL(url); setArtworkError(null); return; } @@ -976,16 +970,10 @@ export function OverviewImageGenerator({ if (pendingCrop.target === "artwork") { detectArtworkTheme(canvas, canvas.width, canvas.height); } - const blob = await new Promise((resolve, reject) => - canvas.toBlob( - (value) => - value ? resolve(value) : reject(new Error("Crop failed")), - "image/png", - ), - ); + const croppedUrl = canvas.toDataURL("image/png"); if (pendingCrop.target === "background") - setBackgroundUrl(URL.createObjectURL(blob)); - else setArtworkUrl(URL.createObjectURL(blob)); + setBackgroundUrl(croppedUrl); + else setArtworkUrl(croppedUrl); setPendingCrop(null); setArtworkError(null); } catch {