image-utility-library
Version:
A Node.js library for compressing, resizing, cropping, and applying effects to images.
43 lines (38 loc) • 1.22 kB
JavaScript
import sharp from 'sharp';
import imagemin from 'imagemin';
import imageminMozjpeg from 'imagemin-mozjpeg';
import imageminPngquant from 'imagemin-pngquant';
/**
* Compress an image buffer.
* @param {Buffer} imageBuffer - The image buffer.
* @param {Number} quality - Compression quality (1-100).
* @returns {Promise<Buffer>} - Compressed image buffer.
*/
const compressImage = async (imageBuffer, quality = 70) => {
try {
// Get image metadata to determine format
const metadata = await sharp(imageBuffer).metadata();
// Initial compression with Sharp
let compressed = await sharp(imageBuffer)
.toFormat(metadata.format)
.toBuffer();
// Further compression with imagemin
compressed = await imagemin.buffer(compressed, {
plugins: [
imageminMozjpeg({
quality,
progressive: true
}),
imageminPngquant({
quality: [Math.max(0.1, quality / 100), Math.min(0.9, quality / 100)],
speed: 4
})
]
});
return compressed;
} catch (error) {
console.error('Error compressing image:', error);
throw error;
}
};
export default compressImage;