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');