Skip to content

Конструктор Sharp

Sharp — это высокопроизводительная библиотека обработки изображений для Node.js. Конструктор — это отправная точка для использования Sharp.

Основное использование

javascript
import sharp from 'sharp';

// Создание экземпляра Sharp из пути к файлу
const image = sharp('input.jpg');

// Создание экземпляра Sharp из Buffer
const image = sharp(inputBuffer);

// Создание экземпляра Sharp из Stream
const image = sharp(inputStream);

Параметры конструктора

Источник ввода

Конструктор Sharp принимает различные источники ввода:

javascript
// Путь к файлу
sharp('input.jpg')

// Buffer
sharp(buffer)

// Stream
sharp(stream)

// URL
sharp('https://example.com/image.jpg')

// Несколько источников ввода
sharp(['input1.jpg', 'input2.jpg'])

Объект опций

javascript
sharp(input, {
  // Опции ввода
  input: {
    failOnError: false,
    limitInputPixels: 268402689,
    sequentialRead: false
  },
  
  // Опции страниц (для многостраничных изображений)
  pages: -1,
  
  // Опции необработанных данных
  raw: {
    width: 1920,
    height: 1080,
    channels: 3
  }
})

Опции ввода

failOnError

  • Тип: boolean
  • По умолчанию: true
  • Описание: Выбрасывать ли исключение при возникновении ошибки
javascript
sharp('input.jpg', { failOnError: false })
  .resize(300, 200)
  .toFile('output.jpg')
  .catch(err => console.log('Обработка не удалась:', err));

limitInputPixels

  • Тип: number
  • По умолчанию: 268402689 (16384 x 16384)
  • Описание: Ограничение количества пикселей входного изображения
javascript
sharp('large-image.jpg', { 
  limitInputPixels: 100000000 
})

sequentialRead

  • Тип: boolean
  • По умолчанию: false
  • Описание: Читать ли данные изображения последовательно
javascript
sharp('input.jpg', { sequentialRead: true })

Многостраничные изображения

Для многостраничных изображений (например, TIFF, PDF) можно указать страницы для обработки:

javascript
// Обработать все страницы
sharp('multi-page.tiff', { pages: -1 })

// Обработать конкретную страницу (начиная с 0)
sharp('multi-page.tiff', { pages: 0 })

// Обработать несколько страниц
sharp('multi-page.tiff', { pages: [0, 2, 4] })

Необработанные данные изображения

При обработке необработанных данных изображения необходимо указать размеры и количество каналов:

javascript
sharp(rawBuffer, {
  raw: {
    width: 1920,
    height: 1080,
    channels: 3  // RGB
  }
})

Обработка ошибок

javascript
try {
  const image = sharp('input.jpg');
  await image.toFile('output.jpg');
} catch (error) {
  console.error('Обработка изображения не удалась:', error.message);
}

Советы по производительности

  1. Повторное использование экземпляров: По возможности повторно используйте экземпляры Sharp
  2. Потоковая обработка: Для больших файлов используйте потоковую обработку
  3. Управление памятью: Своевременно освобождайте ненужные экземпляры
javascript
// Хорошая практика
const sharp = require('sharp');
const image = sharp('input.jpg');

// Обработка нескольких операций
await image
  .resize(300, 200)
  .jpeg({ quality: 80 })
  .toFile('output1.jpg');

await image
  .resize(150, 100)
  .png()
  .toFile('output2.jpg');

Связанные ссылки

Распространяется под лицензией Apache 2.0.