Конструктор 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);
}Советы по производительности
- Повторное использование экземпляров: По возможности повторно используйте экземпляры Sharp
- Потоковая обработка: Для больших файлов используйте потоковую обработку
- Управление памятью: Своевременно освобождайте ненужные экземпляры
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');