fix(image-generator) : preserve uploaded images in exports
CI / Verify (push) Successful in 1m26s
CI / Build immutable images and deploy (push) Successful in 2m19s

This commit is contained in:
2026-09-22 22:53:59 +07:00 Unverified
parent b5e6588958
commit 80d12a2dd8
+10 -22
View File
@@ -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<string>((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<Blob>((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 {