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 라이선스에 따라 릴리스되었습니다.