Работа с изображениями в TypeScript: библиотеки и инструменты

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

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

Начать курс

Работа с изображениями в TypeScript: библиотеки и инструменты

TypeScript — это мощный язык программирования, который расширяет JavaScript статической типизацией. При разработке современных веб-приложений часто возникает необходимость обрабатывать изображения: изменять размеры, конвертировать форматы, накладывать фильтры или анализировать пиксели. В этой статье мы рассмотрим основные библиотеки и инструменты для работы с изображениями в TypeScript, их возможности и примеры использования.

Популярные библиотеки для обработки изображений

Существует несколько популярных библиотек, которые отлично интегрируются с TypeScript. Рассмотрим каждую из них подробнее.

Sharp

Sharp — это высокопроизводительная библиотека для обработки изображений, основанная на нативном модуле libvips. Она идеально подходит для серверных приложений на Node.js. Sharp поддерживает множество форматов (JPEG, PNG, WebP, AVIF, TIFF) и позволяет выполнять операции с минимальным потреблением памяти.

Пример использования с TypeScript:

import sharp from 'sharp';

async function resizeImage(inputPath: string, outputPath: string, width: number, height: number): Promise<void> {
  try {
    await sharp(inputPath)
      .resize(width, height, { fit: 'cover' })
      .toFile(outputPath);
    console.log('Изображение изменено успешно');
  } catch (error) {
    console.error('Ошибка при обработке:', error);
  }
}

// Использование
resizeImage('input.jpg', 'output.jpg', 800, 600);

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

  • Изменение размеров и обрезка
  • Конвертация форматов
  • Наложение водяных знаков
  • Поворот и отражение
  • Управление качеством сжатия

Jimp

Jimp (JavaScript Image Manipulation Program) — это чисто JavaScript-библиотека, не требующая нативных зависимостей. Она работает как в Node.js, так и в браузере. Jimp проще в установке, но медленнее Sharp при обработке больших файлов.

Пример работы с Jimp в TypeScript:

import Jimp from 'jimp';

async function applyFilter(imagePath: string, outputPath: string): Promise<void> {
  const image = await Jimp.read(imagePath);
  
  image
    .resize(300, Jimp.AUTO) // Сохраняет пропорции
    .greyscale()            // Преобразует в оттенки серого
    .contrast(0.5)          // Увеличивает контрастность
    .write(outputPath);
    
  console.log('Фильтр применён');
}

applyFilter('photo.jpg', 'photo-edited.jpg');

Возможности Jimp:

  • Базовые операции: resize, crop, rotate
  • Цветовые эффекты: sepia, greyscale, brightness
  • Работа с прозрачностью и наложение текста
  • Поддержка более 20 форматов изображений

Canvas API для браузерных приложений

Если вы разрабатываете клиентское приложение на TypeScript, можно использовать встроенный Canvas API. Это не библиотека, а стандартный веб-интерфейс для рисования и обработки изображений. TypeScript предоставляет типы для всех методов Canvas.

Пример загрузки и обработки изображения на Canvas:

function processImageOnCanvas(imageUrl: string): void {
  const canvas = document.createElement('canvas');
  const ctx = canvas.getContext('2d');
  
  if (!ctx) {
    throw new Error('Canvas не поддерживается');
  }
  
  const img = new Image();
  img.onload = () => {
    canvas.width = img.width / 2;
    canvas.height = img.height / 2;
    
    ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
    
    // Применяем эффект размытия
    ctx.filter = 'blur(4px)';
    ctx.drawImage(canvas, 0, 0);
    
    // Получаем данные пикселей
    const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
    console.log('Первый пиксель:', imageData.data.slice(0, 4));
  };
  
  img.src = imageUrl;
}

Canvas API подходит для:

  • Редактирования изображений прямо в браузере
  • Создания графиков и анимаций
  • Анализа пиксельных данных (например, для распознавания)
  • Экспорта в различные форматы через toDataURL()

Сравнение библиотек

Выбор инструмента зависит от ваших задач:

  • Sharp — лучший выбор для серверных приложений с высокими требованиями к производительности
  • Jimp — идеален для простых задач и кросс-платформенных решений
  • Canvas API — незаменим для клиентской обработки и ин

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