Обработка изображений в Node.js: библиотеки Sharp, Jimp и gm

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Работа с изображениями в Node.js: обзор лучших библиотек

В современной веб-разработке на Node.js часто возникает необходимость программно обрабатывать изображения: изменять размер, конвертировать форматы, накладывать водяные знаки или оптимизировать для ускорения загрузки сайтов. В этой статье мы рассмотрим три самые популярные библиотеки для работы с изображениями в среде Node.js: Sharp, Jimp и gm (GraphicsMagick).

1. Sharp — быстрая и эффективная обработка

Библиотека Sharp использует нативный модуль libvips, написанный на C, что обеспечивает максимальную производительность. Она идеально подходит для серверных приложений, где требуется быстро обрабатывать десятки и сотни изображений в секунду.

Установка

npm install sharp

Основные возможности и примеры

  • Изменение размера — resize(width, height)
  • Конвертация форматов — toFormat('webp')
  • Обрезка и поворот — extract(), rotate()
  • Наложение текста — composite()

Пример: изменение размера и конвертация в WebP

const sharp = require('sharp');

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

Пример: создание миниатюры с обрезкой

const sharp = require('sharp');

sharp('large-photo.jpg')
  .resize(200, 200, { fit: 'cover' })
  .toFile('thumbnail.jpg')
  .then(() => console.log('Миниатюра создана'));

2. Jimp — чистое JavaScript-решение

Библиотека Jimp (JavaScript Image Manipulation Program) написана полностью на JavaScript и не требует установки дополнительных системных зависимостей. Это делает её идеальным выбором для окружений, где нельзя использовать нативные модули (например, некоторые облачные платформы).

Установка

npm install jimp

Основные возможности

  • Изменение размера, обрезка, поворот
  • Применение цветовых эффектов (оттенки серого, инверсия)
  • Наложение текста с выбором шрифта
  • Работа с прозрачностью (PNG)

Пример: наложение текста на изображение

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, 'Привет, мир!');
        return image.writeAsync('result.png');
      });
  })
  .catch(err => console.error(err));

Пример: создание оттенков серого

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) — мощный инструмент для сложных задач

Библиотека gm является обёрткой для системных утилит GraphicsMagick или ImageMagick. Она предоставляет практически неограниченные возможности обработки изображений, но требует установки соответствующего ПО на сервере.

Установка

npm install gm

Также необходимо установить GraphicsMagick или ImageMagick в систему (например, через apt-get, brew или установщик Windows).

Основные возможности

  • Поддержка всех форматов изображений
  • Комплексное наложение слоёв и масок
  • Продвинутая цветокоррекция
  • Пакетная обработка

Пример: наложение водяного знака

const gm = require('gm');

gm('input.jpg')
  .draw('image Over 10,10 0,0 watermark.png')
  .write('output.jpg', function (err) {
    if (!err) console.log('Водяной знак наложен');
  });

Пример: создание анимированного GIF из нескольких кадров

const gm = require('gm');

gm()
  .in('-delay', '100')
  .in('frame1.png')
  .in('frame2.png')
  .in('frame3.png')
  .write('animated.gif', function (err) {
    if (!err) console.log('GIF создан');
  });
                
    
    

Рекомендаций