Sharp Tool
Description
High-performance image processing for resizing, converting, and manipulating images.
Source
-
Repository: lovell/sharp
-
License: Apache-2.0
Installation
npm install sharp
Usage Examples
Resize Image
import sharp from 'sharp';
// Resize to specific dimensions await sharp('input.jpg') .resize(800, 600) .toFile('output.jpg');
// Resize with aspect ratio preserved await sharp('input.jpg') .resize(800, null) // Width 800, auto height .toFile('output.jpg');
// Resize with fit options await sharp('input.jpg') .resize(800, 600, { fit: 'cover', // cover, contain, fill, inside, outside position: 'center' // center, top, right, bottom, left }) .toFile('output.jpg');
Convert Format
// Convert to WebP await sharp('input.jpg') .webp({ quality: 80 }) .toFile('output.webp');
// Convert to AVIF (modern format) await sharp('input.jpg') .avif({ quality: 60 }) .toFile('output.avif');
// Convert to PNG with transparency await sharp('input.jpg') .png({ compressionLevel: 9 }) .toFile('output.png');
Image Manipulation
// Rotate and flip await sharp('input.jpg') .rotate(90) .flip() .toFile('output.jpg');
// Blur and sharpen await sharp('input.jpg') .blur(5) .sharpen() .toFile('output.jpg');
// Grayscale and tint await sharp('input.jpg') .grayscale() .tint({ r: 255, g: 128, b: 0 }) .toFile('output.jpg');
// Crop await sharp('input.jpg') .extract({ left: 100, top: 100, width: 500, height: 300 }) .toFile('output.jpg');
Add Watermark
async function addWatermark(input: string, watermark: string, output: string) { const image = sharp(input); const { width, height } = await image.metadata();
// Resize watermark const watermarkBuffer = await sharp(watermark) .resize(Math.round(width! * 0.2)) .toBuffer();
await image .composite([{ input: watermarkBuffer, gravity: 'southeast', blend: 'over', }]) .toFile(output); }
Generate Thumbnails
async function generateThumbnails(input: string, sizes: number[]) { const image = sharp(input);
await Promise.all(sizes.map(size =>
image
.clone()
.resize(size, size, { fit: 'cover' })
.jpeg({ quality: 80 })
.toFile(thumb-${size}.jpg)
));
}
// Usage await generateThumbnails('photo.jpg', [64, 128, 256, 512]);
Stream Processing
import { createReadStream, createWriteStream } from 'fs';
// Process large images with streams createReadStream('large-input.jpg') .pipe(sharp().resize(1920, 1080).jpeg({ quality: 85 })) .pipe(createWriteStream('output.jpg'));
Tags
image , resize , convert , thumbnail , processing
Compatibility
-
Codex: ✅
-
Claude Code: ✅