Skip to content

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

パフォーマンスのヒント

  1. インスタンスの再利用: 可能な限り Sharp インスタンスを再利用する
  2. ストリーム処理: 大きなファイルにはストリーム処理を使用する
  3. メモリ管理: 不要なインスタンスを適時に解放する
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');

関連リンク

Apache 2.0 ライセンスの下でリリースされています。