Improve emoji handling and text display in previews and generated images

Refactor emoji removal logic into a shared utility and update dependencies.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: ae4037a0-2a6f-4530-9bac-79b543286bda
Replit-Commit-Checkpoint-Type: intermediate_checkpoint
Replit-Commit-Event-Id: 59d8c635-691c-42a3-b368-902e8f16eeee
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/397bca8c-984f-43ff-841a-10897aeb8140/ae4037a0-2a6f-4530-9bac-79b543286bda/Q6FJ7Lw
This commit is contained in:
michaelschal committed 2025-11-18 13:45:07 +00:00
1 parent e1c6a0ad2a
commit 1bdb7445c3
5 files changed
+30 -32

No files matched your search

+2 -16
View File
@@ -3,6 +3,7 @@ import { randomUUID } from "crypto";
import path from "path";
import fs from "fs/promises";
import { createCanvas, loadImage, registerFont } from "canvas";
import { removeEmojis } from "@shared/emoji";
interface CropDimensions {
width: number;
@@ -108,21 +109,6 @@ export class ImageProcessor {
}
}
/**
* Removes emojis from text since canvas doesn't support them natively
*/
private removeEmojis(text: string): string {
// Remove emojis and other unicode symbols that canvas can't render
// Using a regex that removes emoji-like characters
return text
.replace(/[\u2600-\u26FF]/g, '') // Misc symbols
.replace(/[\u2700-\u27BF]/g, '') // Dingbats
.replace(/[\uD800-\uDFFF]/g, '') // Surrogate pairs (emoji range)
.replace(/[\uFE00-\uFE0F]/g, '') // Variation selectors
.replace(/\s+/g, ' ') // Normalize whitespace
.trim();
}
async addTextToStoryImage(imageUrl: string, text: string): Promise<Buffer> {
const STORY_WIDTH = 1080;
const STORY_HEIGHT = 1920;
@@ -133,7 +119,7 @@ export class ImageProcessor {
const LINE_HEIGHT_MULTIPLIER = 1.3;
// Remove emojis from text as canvas doesn't support them
const cleanText = this.removeEmojis(text);
const cleanText = removeEmojis(text);
const canvas = createCanvas(STORY_WIDTH, STORY_HEIGHT);
const ctx = canvas.getContext('2d');