Sharp 构造函数
Sharp 是 Node.js 的高性能图像处理库。构造函数是使用 Sharp 的起点。
基本用法
javascript
import sharp from 'sharp';
// 从文件路径创建 Sharp 实例
const image = sharp('input.jpg');
// 从 Buffer 创建 Sharp 实例
const image = sharp(inputBuffer);
// 从 Stream 创建 Sharp 实例
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');