Untitled
unknown
javascript
a year ago
2.0 kB
22
Indexable
import webp from 'webp-converter';
import { Buffer } from 'buffer';
export default async function convertToWebp({ imageBuffer, mimeType }, { logging }) {
let isSuccess = true;
try {
const maxBufferSize = 10485760; // 10MB
// Log input buffer type and size for debugging
logging.log(`Input buffer type: ${typeof imageBuffer}`);
logging.log(`Input buffer size: ${Buffer.byteLength(imageBuffer)} bytes`);
if (Buffer.byteLength(imageBuffer) > maxBufferSize) {
throw new Error('Input buffer size exceeds the limit of 10MB.');
}
// Determine the file type from the mimeType
const fileType = mimeType.split('/')[1];
// Convert buffer to WebP format using webp-converter's buffer2webpbuffer
const result = await webp.buffer2webpbuffer(imageBuffer, fileType, "-q 80")
.then((res) => {
if (typeof res === 'string') {
logging.log('WebP conversion finished.');
return Buffer.from(res, 'base64');
} else {
throw new Error('WebP conversion returned an unexpected result format.');
}
})
.catch((error) => {
logging.log(`WebP conversion promise rejected: ${error.message}`);
throw new Error('WebP conversion failed.');
});
// Additional validation for the result buffer
if (!result || !Buffer.isBuffer(result)) {
logging.log('WebP conversion returned an invalid buffer.');
throw new Error('WebP conversion failed or did not return a valid buffer.');
}
logging.log('WebP conversion successful.');
return { webpBuffer: result, isSuccess };
} catch (error) {
isSuccess = false;
logging.log(`WebP conversion error: ${error.message}`);
return { webpBuffer: null, isSuccess };
}
}
Editor is loading...
Leave a Comment