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);
}เคล็ดลับประสิทธิภาพ
- ใช้ซ้ำอินสแตนซ์: ใช้ซ้ำอินสแตนซ์ Sharp เท่าที่เป็นไปได้
- การประมวลผลแบบสตรีม: สำหรับไฟล์ขนาดใหญ่ ใช้การประมวลผลแบบสตรีม
- การจัดการหน่วยความจำ: ปล่อยอินสแตนซ์ที่ไม่ต้องการทันที
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');