Files
taskplaner/src/lib/server/images/thumbnails.ts
Thomas Richter 0987d16dc0 feat(03-01): add storage and thumbnail utilities
- Add storage.ts with directory management and file I/O
- Add thumbnails.ts with EXIF-aware thumbnail generation
- Thumbnails always output as JPEG with 80% quality
2026-01-29 15:23:08 +01:00

24 lines
675 B
TypeScript

import sharp from 'sharp';
/**
* Generate a thumbnail from an image buffer
*
* CRITICAL: Uses sharp.rotate() first to handle EXIF orientation from mobile photos.
* Without this, photos taken in portrait mode may appear rotated.
*
* @param buffer - Original image buffer
* @param size - Thumbnail size (default 150px)
* @returns Thumbnail buffer as JPEG
*/
export async function generateThumbnail(buffer: Buffer, size: number = 150): Promise<Buffer> {
return sharp(buffer)
.rotate() // Auto-rotate based on EXIF orientation
.resize(size, size, {
fit: 'cover',
position: 'center',
withoutEnlargement: true
})
.jpeg({ quality: 80 })
.toBuffer();
}