Skip to content

快速開始

本指南將幫助您快速上手 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 的基本用法,可以:

基於 Apache 2.0 許可證發布