Back to Documentation

Image Processing with Sharp

Tools

Tools
SharpImage ProcessingPerformance

Image Processing with Sharp

High-performance image compression, resizing, and manipulation using Sharp.

Image Processing with Sharp

Sharp is a high-performance Node.js image processing library built on libvips.

Why Sharp?

Performance

  • Fast: Up to 4x faster than ImageMagick
  • Memory Efficient: Uses libvips streaming architecture
  • Concurrent: Handles multiple operations efficiently

Features

  • Resize, crop, and rotate images
  • Format conversion (JPEG, PNG, WebP, etc.)
  • Compression and optimization
  • Metadata extraction

Implementation

Basic Operations

import sharp from 'sharp';

// Resize
await sharp(inputBuffer)
  .resize(800, 600)
  .toFile('output.jpg');

// Compress
await sharp(inputBuffer)
  .jpeg({ quality: 80 })
  .toBuffer();

// Crop
await sharp(inputBuffer)
  .extract({ left: 100, top: 100, width: 400, height: 300 })
  .toFile('cropped.jpg');

In The Workbench

Our file compressor uses Sharp for:

  1. Image Compression: Reduce file sizes while maintaining quality
  2. Format Conversion: Convert between JPEG, PNG, and WebP
  3. Resizing: Adjust dimensions for optimization
  4. Quality Control: Apply lossy or lossless compression

Compression Example

const compressed = await sharp(imageBuffer)
  .jpeg({ 
    quality: compressionLevel,
    mozjpeg: true // Better compression
  })
  .toBuffer();

Best Practices

  1. Stream Processing: Use streams for large files
  2. Batch Operations: Process multiple images concurrently
  3. Format Selection: Choose appropriate formats (WebP for web, JPEG for photos)
  4. Quality Balance: Find balance between file size and quality

Performance Tips

  • Use toBuffer() for in-memory processing
  • Leverage Sharp's built-in optimizations
  • Cache processed images when possible
  • Use appropriate quality settings for use case