Image Processing in Node.js: Sharp, Jimp, and gm Libraries

Online Python Trainer for Beginners

Learn Python easily without overwhelming theory. Solve practical tasks with automatic checking, get hints in Russian, and write code directly in your browser — no installation required.

Start Course

Working with Images in Node.js: Overview of the Best Libraries



In modern web development with Node.js, there is often a need to programmatically process images: resize, convert formats, apply watermarks, or optimize for faster website loading. In this article, we will look at the three most popular libraries for working with images in the Node.js environment: Sharp, Jimp, and gm (GraphicsMagick).



1. Sharp — Fast and Efficient Processing



The Sharp library uses the native libvips module, written in C, which ensures maximum performance. It is ideal for server-side applications that need to quickly process dozens or hundreds of images per second.



Installation

npm install sharp


Key Features and Examples

  • Resizing — resize(width, height)
  • Format Conversion — toFormat('webp')
  • Crop and Rotate — extract(), rotate()
  • Text Overlay — composite()


Example: Resizing and Converting to WebP

const sharp = require('sharp');

sharp('input.jpg') .resize(800, 600) .toFormat('webp') .toFile('output.webp') .then(info => console.log('Done:', info)) .catch(err => console.error(err));


Example: Creating a Cropped Thumbnail

const sharp = require('sharp');

sharp('large-photo.jpg') .resize(200, 200, { fit: 'cover' }) .toFile('thumbnail.jpg') .then(() => console.log('Thumbnail created'));


2. Jimp — Pure JavaScript Solution



The Jimp (JavaScript Image Manipulation Program) library is written entirely in JavaScript and does not require installing additional system dependencies. This makes it an ideal choice for environments where native modules cannot be used (e.g., some cloud platforms).



Installation

npm install jimp


Key Features

  • Resizing, cropping, rotating
  • Applying color effects (grayscale, inversion)
  • Text overlay with font selection
  • Working with transparency (PNG)


Example: Overlaying Text on an Image

const Jimp = require('jimp');

Jimp.read('background.png') .then(image => { return Jimp.loadFont(Jimp.FONT_SANS_32_WHITE) .then(font => { image.print(font, 50, 50, 'Hello, world!'); return image.writeAsync('result.png'); }); }) .catch(err => console.error(err));


Example: Creating Grayscale

const Jimp = require('jimp');

Jimp.read('colorful.jpg') .then(image => { return image .greyscale() .writeAsync('black-white.jpg'); }) .catch(err => console.error(err));


3. gm (GraphicsMagick) — Powerful Tool for Complex Tasks



The gm library is a wrapper for the system utilities GraphicsMagick or ImageMagick. It provides virtually unlimited image processing capabilities but requires installing the corresponding software on the server.



Installation

npm install gm

You also need to install GraphicsMagick or ImageMagick on your system (e.g., via apt-get, brew, or the Windows installer).



Key Features

  • Support for all image formats
  • Complex layer and mask overlays
  • Advanced color correction
  • Batch processing


Example: Applying a Watermark

const gm = require('gm');

gm('input.jpg')

Recommendations