Skip to content

Hàm tạo Sharp

Sharp là thư viện xử lý hình ảnh hiệu suất cao cho Node.js. Hàm tạo là điểm khởi đầu để sử dụng Sharp.

Cách sử dụng cơ bản

javascript
import sharp from 'sharp';

// Tạo instance Sharp từ đường dẫn tệp
const image = sharp('input.jpg');

// Tạo instance Sharp từ Buffer
const image = sharp(inputBuffer);

// Tạo instance Sharp từ Stream
const image = sharp(inputStream);

Tham số hàm tạo

Nguồn đầu vào

Hàm tạo Sharp chấp nhận nhiều loại nguồn đầu vào:

javascript
// Đường dẫn tệp
sharp('input.jpg')

// Buffer
sharp(buffer)

// Stream
sharp(stream)

// URL
sharp('https://example.com/image.jpg')

// Nhiều nguồn đầu vào
sharp(['input1.jpg', 'input2.jpg'])

Đối tượng tùy chọn

javascript
sharp(input, {
  // Tùy chọn đầu vào
  input: {
    failOnError: false,
    limitInputPixels: 268402689,
    sequentialRead: false
  },
  
  // Tùy chọn trang (cho hình ảnh nhiều trang)
  pages: -1,
  
  // Tùy chọn thô
  raw: {
    width: 1920,
    height: 1080,
    channels: 3
  }
})

Tùy chọn đầu vào

failOnError

  • Loại: boolean
  • Giá trị mặc định: true
  • Mô tả: Có ném ngoại lệ khi gặp lỗi không
javascript
sharp('input.jpg', { failOnError: false })
  .resize(300, 200)
  .toFile('output.jpg')
  .catch(err => console.log('Xử lý thất bại:', err));

limitInputPixels

  • Loại: number
  • Giá trị mặc định: 268402689 (16384 x 16384)
  • Mô tả: Giới hạn số lượng pixel của hình ảnh đầu vào
javascript
sharp('large-image.jpg', { 
  limitInputPixels: 100000000 
})

sequentialRead

  • Loại: boolean
  • Giá trị mặc định: false
  • Mô tả: Có đọc dữ liệu hình ảnh tuần tự không
javascript
sharp('input.jpg', { sequentialRead: true })

Hình ảnh nhiều trang

Đối với hình ảnh nhiều trang (như TIFF, PDF), bạn có thể chỉ định trang cần xử lý:

javascript
// Xử lý tất cả các trang
sharp('multi-page.tiff', { pages: -1 })

// Xử lý trang cụ thể (bắt đầu từ 0)
sharp('multi-page.tiff', { pages: 0 })

// Xử lý nhiều trang
sharp('multi-page.tiff', { pages: [0, 2, 4] })

Dữ liệu hình ảnh thô

Khi xử lý dữ liệu hình ảnh thô, cần chỉ định kích thước và số kênh:

javascript
sharp(rawBuffer, {
  raw: {
    width: 1920,
    height: 1080,
    channels: 3  // RGB
  }
})

Xử lý lỗi

javascript
try {
  const image = sharp('input.jpg');
  await image.toFile('output.jpg');
} catch (error) {
  console.error('Xử lý hình ảnh thất bại:', error.message);
}

Gợi ý hiệu suất

  1. Tái sử dụng instance: Tái sử dụng instance Sharp khi có thể
  2. Xử lý luồng: Đối với tệp lớn, sử dụng xử lý luồng
  3. Quản lý bộ nhớ: Giải phóng các instance không cần thiết kịp thời
javascript
// Cách làm tốt
const sharp = require('sharp');
const image = sharp('input.jpg');

// Xử lý nhiều thao tác
await image
  .resize(300, 200)
  .jpeg({ quality: 80 })
  .toFile('output1.jpg');

await image
  .resize(150, 100)
  .png()
  .toFile('output2.jpg');

Liên kết liên quan

Được phát hành theo Giấy phép Apache 2.0.