From be6b692a7bf6df755f15568a3b46eea2a85760b6 Mon Sep 17 00:00:00 2001 From: Jesse Wierzbinski Date: Tue, 9 Apr 2024 03:18:04 -1000 Subject: [PATCH] Update Blurhash algorithm --- server/api/api/v1/media/index.ts | 32 ++++++++++++++++++++++---------- server/api/api/v2/media/index.ts | 31 ++++++++++++++++++++++--------- 2 files changed, 44 insertions(+), 19 deletions(-) diff --git a/server/api/api/v1/media/index.ts b/server/api/api/v1/media/index.ts index 21944f7d..8188e5b5 100644 --- a/server/api/api/v1/media/index.ts +++ b/server/api/api/v1/media/index.ts @@ -77,16 +77,28 @@ export default apiRoute<{ ? await sharp(await file.arrayBuffer()).metadata() : null; - const blurhash = - isImage && metadata?.width && metadata?.height - ? encode( - new Uint8ClampedArray(await file.arrayBuffer()), - metadata?.width ?? 0, - metadata?.height ?? 0, - 4, - 4, - ) - : null; + const blurhash = await new Promise((resolve) => { + (async () => + sharp(await file.arrayBuffer()) + .raw() + .ensureAlpha() + .toBuffer((err, buffer) => { + if (err) { + resolve(null); + return; + } + + resolve( + encode( + new Uint8ClampedArray(buffer), + metadata?.width ?? 0, + metadata?.height ?? 0, + 4, + 4, + ) as string, + ); + }))(); + }); let url = ""; diff --git a/server/api/api/v2/media/index.ts b/server/api/api/v2/media/index.ts index 6336c928..6dc3d6ae 100644 --- a/server/api/api/v2/media/index.ts +++ b/server/api/api/v2/media/index.ts @@ -77,15 +77,28 @@ export default apiRoute<{ ? await sharp(await file.arrayBuffer()).metadata() : null; - const blurhash = isImage - ? encode( - new Uint8ClampedArray(await file.arrayBuffer()), - metadata?.width ?? 0, - metadata?.height ?? 0, - 4, - 4, - ) - : null; + const blurhash = await new Promise((resolve) => { + (async () => + sharp(await file.arrayBuffer()) + .raw() + .ensureAlpha() + .toBuffer((err, buffer) => { + if (err) { + resolve(null); + return; + } + + resolve( + encode( + new Uint8ClampedArray(buffer), + metadata?.width ?? 0, + metadata?.height ?? 0, + 4, + 4, + ) as string, + ); + }))(); + }); let url = "";