import { extname } from 'path' import sharp from 'sharp' import { getErrorMessage } from './guards' interface TextureCompressionResult { buffer: Buffer compressed: boolean error?: string } export async function compressTextureBuffer( filename: string, buffer: Buffer, ): Promise { const ext = extname(filename).toLowerCase() try { if (ext === '.jpg' || ext === '.jpeg') { return { buffer: await sharp(buffer).jpeg({ quality: 82, mozjpeg: true }).toBuffer(), compressed: true, } } if (ext === '.png') { return { buffer: await sharp(buffer).png({ compressionLevel: 9, adaptiveFiltering: true }).toBuffer(), compressed: true, } } if (ext === '.webp') { return { buffer: await sharp(buffer).webp({ quality: 82 }).toBuffer(), compressed: true, } } } catch (err) { const message = getErrorMessage(err, String(err)) return { buffer, compressed: false, error: `Compression texture echouee pour ${filename}: ${message}`, } } return { buffer, compressed: false } }