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.