fix: resolve 7 bugs from QA sweep (#208)

- Fix selective metadata stripping (P1): use Sharp's keepExif()/keepIccProfile()
  instead of broken withMetadata({}) that preserved everything
- Fix meme font mapping (P1): add ArchivoBlack and ComicNeue fonts, map
  arial-black and comic-sans to correct TTF files instead of Anton
- Fix meme contentType (P2): detect actual output format from Sharp metadata
  instead of hardcoding image/png
- Fix info/text-overlay/color-palette i18n (P2): wire up existing translation
  keys that were imported but never used
- Fix info and color-palette displayMode (P2): change from before-after to
  no-comparison since neither tool produces a processed image
- Add missing i18n keys across all 21 locales
- Update displayMode test assertions
This commit is contained in:
SnapOtter
2026-06-07 18:27:09 +08:00
committed by GitHub
parent 59c9df3f0d
commit 73b259462a
32 changed files with 278 additions and 70 deletions
+2 -2
View File
@@ -39,8 +39,8 @@ const FONT_DIR = join(import.meta.dirname, "../../static/fonts");
const FONT_MAP: Record<string, string> = {
anton: "Anton-Regular.ttf",
"arial-black": "Anton-Regular.ttf",
"comic-sans": "Anton-Regular.ttf",
"arial-black": "ArchivoBlack-Regular.ttf",
"comic-sans": "ComicNeue-Bold.ttf",
montserrat: "Montserrat-Black.ttf",
"bebas-neue": "BebasNeue-Regular.ttf",
"permanent-marker": "PermanentMarker-Regular.ttf",
+10 -2
View File
@@ -159,14 +159,22 @@ async function processMeme(
.composite([{ input: svgBuffer }])
.toBuffer();
} else {
// No text -- just pass the image through
result = await sharp(imageBuffer).toBuffer();
}
const outputMeta = await sharp(result).metadata();
const detectedFormat = outputMeta.format ?? "png";
const mimeMap: Record<string, string> = {
jpeg: "image/jpeg",
png: "image/png",
webp: "image/webp",
gif: "image/gif",
};
return {
buffer: result,
filename,
contentType: "image/png",
contentType: mimeMap[detectedFormat] ?? "image/png",
};
}
Binary file not shown.
Binary file not shown.