Skip to content

Sharp Constructor

Sharp เป็นไลบรารีประมวลผลรูปภาพประสิทธิภาพสูงสำหรับ Node.js Constructor เป็นจุดเริ่มต้นในการใช้ Sharp

การใช้งานพื้นฐาน

javascript
import sharp from 'sharp';

// สร้างอินสแตนซ์ Sharp จากเส้นทางไฟล์
const image = sharp('input.jpg');

// สร้างอินสแตนซ์ Sharp จาก Buffer
const image = sharp(inputBuffer);

// สร้างอินสแตนซ์ Sharp จาก Stream
const image = sharp(inputStream);

พารามิเตอร์ Constructor

แหล่งข้อมูลอินพุต

Constructor ของ 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