Быстрый старт
Это руководство поможет вам быстро начать работу с Sharp и изучить базовые операции обработки изображений.
Базовое использование
Импорт Sharp
javascript
import sharp from 'sharp';Или используя CommonJS:
javascript
const sharp = require('sharp');Чтение изображений
Sharp поддерживает множество форматов ввода:
javascript
// Чтение из файла
const image = sharp('input.jpg');
// Чтение из Buffer
const image = sharp(buffer);
// Чтение из Stream
const image = sharp(stream);Базовые операции
Изменение размера
javascript
// Изменение до указанного размера
await sharp('input.jpg')
.resize(300, 200)
.toFile('output.jpg');
// Сохранение соотношения сторон
await sharp('input.jpg')
.resize(300, null) // Ширина 300, высота автоматически
.toFile('output.jpg');
// Использование различных режимов адаптации
await sharp('input.jpg')
.resize(300, 200, {
fit: 'cover', // Обрезка для соответствия
position: 'center' // Центрированная обрезка
})
.toFile('output.jpg');Преобразование форматов
javascript
// Преобразование в JPEG
await sharp('input.png')
.jpeg({ quality: 80 })
.toFile('output.jpg');
// Преобразование в WebP
await sharp('input.jpg')
.webp({ quality: 80 })
.toFile('output.webp');
// Преобразование в PNG
await sharp('input.jpg')
.png({ compressionLevel: 9 })
.toFile('output.png');Обрезка
javascript
// Обрезка указанной области
await sharp('input.jpg')
.extract({ left: 100, top: 100, width: 200, height: 200 })
.toFile('cropped.jpg');Поворот
javascript
// Поворот на 90 градусов
await sharp('input.jpg')
.rotate(90)
.toFile('rotated.jpg');Продвинутые операции
Эффекты фильтров
javascript
// Размытие
await sharp('input.jpg')
.blur(5)
.toFile('blurred.jpg');
// Резкость
await sharp('input.jpg')
.sharpen()
.toFile('sharpened.jpg');
// Оттенки серого
await sharp('input.jpg')
.grayscale()
.toFile('grayscale.jpg');Настройка цвета
javascript
// Настройка яркости
await sharp('input.jpg')
.modulate({ brightness: 1.2 })
.toFile('bright.jpg');
// Настройка контрастности
await sharp('input.jpg')
.modulate({ contrast: 1.5 })
.toFile('contrast.jpg');
// Настройка насыщенности
await sharp('input.jpg')
.modulate({ saturation: 0.8 })
.toFile('desaturated.jpg');Опции вывода
Сохранение в файл
javascript
await sharp('input.jpg')
.resize(300, 200)
.toFile('output.jpg');Вывод в Buffer
javascript
const buffer = await sharp('input.jpg')
.resize(300, 200)
.jpeg()
.toBuffer();Вывод в Stream
javascript
sharp('input.jpg')
.resize(300, 200)
.jpeg()
.pipe(fs.createWriteStream('output.jpg'));Обработка ошибок
javascript
try {
await sharp('input.jpg')
.resize(300, 200)
.toFile('output.jpg');
} catch (error) {
console.error('Обработка изображения не удалась:', error);
}Оптимизация производительности
Потоковая обработка
javascript
// Использование потоков для больших файлов
const pipeline = sharp()
.resize(300, 200)
.jpeg({ quality: 80 });
fs.createReadStream('large-input.jpg')
.pipe(pipeline)
.pipe(fs.createWriteStream('output.jpg'));Параллельная обработка
javascript
// Одновременная обработка нескольких изображений
const promises = images.map(image =>
sharp(image)
.resize(300, 200)
.jpeg()
.toBuffer()
);
const results = await Promise.all(promises);Полный пример
javascript
import sharp from 'sharp';
import fs from 'fs';
async function processImage() {
try {
// Создание миниатюры
await sharp('input.jpg')
.resize(150, 150, { fit: 'cover' })
.jpeg({ quality: 90 })
.toFile('thumbnail.jpg');
// Создание изображения среднего размера
await sharp('input.jpg')
.resize(800, 600, { fit: 'inside' })
.webp({ quality: 80 })
.toFile('medium.webp');
// Создание большого изображения
await sharp('input.jpg')
.resize(1920, 1080, { fit: 'inside' })
.jpeg({ quality: 85 })
.toFile('large.jpg');
console.log('Обработка изображений завершена!');
} catch (error) {
console.error('Обработка не удалась:', error);
}
}
processImage();Следующие шаги
Теперь, когда вы изучили базовое использование Sharp, вы можете:
- Просмотреть документацию API для изучения всех доступных методов
- Изучить продвинутые примеры для освоения дополнительных техник
- Узнать об оптимизации производительности для повышения эффективности обработки