const sharp = require('sharp'); async function resizeImage(inputFilePath, resolution) { const maxLowRes = 512; const maxShortSideHighRes = 768; const maxLongSideHighRes = 2000; let newWidth, newHeight; let resizeOptions = { fit: 'inside', withoutEnlargement: true }; if (resolution === 'low') { resizeOptions.width = maxLowRes; resizeOptions.height = maxLowRes; } else if (resolution === 'high') { const metadata = await sharp(inputFilePath).metadata(); const isWidthShorter = metadata.width < metadata.height; if (isWidthShorter) { // Width is the shorter side newWidth = Math.min(metadata.width, maxShortSideHighRes); // Calculate new height to maintain aspect ratio newHeight = Math.round((metadata.height / metadata.width) * newWidth); // Ensure the long side does not exceed the maximum allowed if (newHeight > maxLongSideHighRes) { newHeight = maxLongSideHighRes; newWidth = Math.round((metadata.width / metadata.height) * newHeight); } } else { // Height is the shorter side newHeight = Math.min(metadata.height, maxShortSideHighRes); // Calculate new width to maintain aspect ratio newWidth = Math.round((metadata.width / metadata.height) * newHeight); // Ensure the long side does not exceed the maximum allowed if (newWidth > maxLongSideHighRes) { newWidth = maxLongSideHighRes; newHeight = Math.round((metadata.height / metadata.width) * newWidth); } } resizeOptions.width = newWidth; resizeOptions.height = newHeight; } else { throw new Error('Invalid resolution parameter'); } const resizedBuffer = await sharp(inputFilePath).rotate().resize(resizeOptions).toBuffer(); const resizedMetadata = await sharp(resizedBuffer).metadata(); return { buffer: resizedBuffer, width: resizedMetadata.width, height: resizedMetadata.height }; } module.exports = { resizeImage };