Utility API
Sharp ให้ฟังก์ชันเครื่องมืออรรถประโยชน์หลายประเภทสำหรับช่วยในการประมวลผลรูปภาพและการแปลงรูปแบบ
การตรวจจับรูปแบบ
ตรวจจับรูปแบบที่รองรับ
javascript
import sharp from 'sharp';
// รับรูปแบบอินพุตที่รองรับ
console.log('รูปแบบอินพุตที่รองรับ:', sharp.format);
// รับรูปแบบเอาต์พุตที่รองรับ
console.log('รูปแบบเอาต์พุตที่รองรับ:', sharp.format);ตรวจสอบรูปแบบไฟล์
javascript
async function checkImageFormat(filePath) {
try {
const metadata = await sharp(filePath).metadata();
return {
format: metadata.format,
width: metadata.width,
height: metadata.height,
channels: metadata.channels
};
} catch (error) {
return { error: error.message };
}
}พื้นที่สี
ค่าคงที่พื้นที่สี
javascript
// พื้นที่สีที่มี
sharp.colourspace.srgb // sRGB
sharp.colourspace.rgb // RGB
sharp.colourspace.cmyk // CMYK
sharp.colourspace.grey // ระดับสีเทา
sharp.colourspace.multiband // หลายแบนด์
sharp.colourspace.lab // Lab
sharp.colourspace.xyz // XYZ
sharp.colourspace.ycbcr // YCbCrการแปลงพื้นที่สี
javascript
// แปลงเป็นระดับสีเทา
sharp('input.jpg')
.grayscale()
.toFile('output.jpg');
// แปลงเป็น CMYK
sharp('input.jpg')
.toColourspace(sharp.colourspace.cmyk)
.tiff()
.toFile('output.tiff');เคอร์เนลและฟิลเตอร์
เคอร์เนลการปรับขนาด
javascript
// เคอร์เนลการปรับขนาดที่มี
sharp.kernel.nearest // เพื่อนบ้านที่ใกล้ที่สุด
sharp.kernel.cubic // การสอดแทรกแบบลูกบาศก์
sharp.kernel.mitchell // Mitchell-Netravali
sharp.kernel.lanczos2 // Lanczos 2-lobed
sharp.kernel.lanczos3 // Lanczos 3-lobed (ค่าเริ่มต้น)ใช้เคอร์เนลที่กำหนดเอง
javascript
// ใช้เคอร์เนลการปรับขนาดที่กำหนดเอง
sharp('input.jpg')
.resize(300, 200, { kernel: sharp.kernel.lanczos3 })
.toFile('output.jpg');ค่าคงที่ตำแหน่ง
ตัวเลือกตำแหน่ง
javascript
// ตัวเลือกตำแหน่งที่มี
sharp.position.top // ด้านบน
sharp.position.right // ด้านขวา
sharp.position.bottom // ด้านล่าง
sharp.position.left // ด้านซ้าย
sharp.position.center // กลาง (ค่าเริ่มต้น)
sharp.position.centre // กลาง (การสะกดแบบอังกฤษ)
sharp.position.north // เหนือ (ด้านบน)
sharp.position.east // ตะวันออก (ด้านขวา)
sharp.position.south // ใต้ (ด้านล่าง)
sharp.position.west // ตะวันตก (ด้านซ้าย)
sharp.position.northeast // ตะวันออกเฉียงเหนือ
sharp.position.southeast // ตะวันออกเฉียงใต้
sharp.position.southwest // ตะวันตกเฉียงใต้
sharp.position.northwest // ตะวันตกเฉียงเหนือการทำงานกับช่องสัญญาณ
ค่าคงที่ช่องสัญญาณ
javascript
// ค่าคงที่ช่องสัญญาณ
sharp.channel.red // ช่องสัญญาณสีแดง
sharp.channel.green // ช่องสัญญาณสีเขียว
sharp.channel.blue // ช่องสัญญาณสีน้ำเงิน
sharp.channel.alpha // ช่องสัญญาณความโปร่งใส
sharp.channel.grey // ช่องสัญญาณระดับสีเทาการทำงานกับช่องสัญญาณ
javascript
// ดึงช่องสัญญาณสีแดง
sharp('input.jpg')
.extractChannel(sharp.channel.red)
.toFile('red-channel.jpg');
// ดึงช่องสัญญาณทั้งหมด
const channels = await sharp('input.jpg').separate();การจัดการข้อผิดพลาด
ประเภทข้อผิดพลาด
javascript
// ข้อผิดพลาด Sharp ที่พบบ่อย
sharp.errors.InputError // ข้อผิดพลาดอินพุต
sharp.errors.ProcessError // ข้อผิดพลาดการประมวลผล
sharp.errors.OutputError // ข้อผิดพลาดเอาต์พุตตัวอย่างการจัดการข้อผิดพลาด
javascript
try {
await sharp('input.jpg')
.resize(300, 200)
.toFile('output.jpg');
} catch (error) {
if (error instanceof sharp.errors.InputError) {
console.error('ข้อผิดพลาดไฟล์อินพุต:', error.message);
} else if (error instanceof sharp.errors.ProcessError) {
console.error('ข้อผิดพลาดการประมวลผล:', error.message);
} else if (error instanceof sharp.errors.OutputError) {
console.error('ข้อผิดพลาดเอาต์พุต:', error.message);
} else {
console.error('ข้อผิดพลาดที่ไม่ทราบ:', error.message);
}
}การตรวจสอบประสิทธิภาพ
การใช้หน่วยความจำ
javascript
// รับสถิติการใช้หน่วยความจำของ Sharp
const stats = sharp.cache();
console.log('สถิติแคช:', stats);
// ล้างแคช
sharp.cache(false);การควบคุมการทำงานพร้อมกัน
javascript
// ตั้งค่าขีดจำกัดการทำงานพร้อมกัน
sharp.concurrency(4); // สูงสุด 4 การดำเนินการพร้อมกัน
// รับจำนวนการทำงานพร้อมกันปัจจุบัน
console.log('จำนวนการทำงานพร้อมกันปัจจุบัน:', sharp.concurrency());ฟังก์ชันเครื่องมือ
สร้างรูปภาพทดสอบ
javascript
// สร้างรูปภาพสีเดียว
const redImage = sharp({
create: {
width: 300,
height: 200,
channels: 3,
background: { r: 255, g: 0, b: 0 }
}
});
// สร้างรูปภาพไล่สี
const gradient = sharp({
create: {
width: 300,
height: 200,
channels: 3,
background: { r: 0, g: 0, b: 0 }
}
});การรวมรูปภาพ
javascript
// รวมรูปภาพหลายรูป
const composite = await sharp('background.jpg')
.composite([
{
input: 'overlay.png',
top: 100,
left: 100
}
])
.jpeg()
.toBuffer();เครื่องมือการประมวลผลแบบกลุ่ม
การปรับขนาดแบบกลุ่ม
javascript
const fs = require('fs').promises;
async function batchResize(inputDir, outputDir, width, height) {
const files = await fs.readdir(inputDir);
for (const file of files) {
if (file.match(/\.(jpg|jpeg|png|webp)$/i)) {
try {
await sharp(`${inputDir}/${file}`)
.resize(width, height)
.jpeg({ quality: 80 })
.toFile(`${outputDir}/${file}`);
console.log(`การประมวลผลเสร็จสิ้น: ${file}`);
} catch (error) {
console.error(`การประมวลผลล้มเหลว ${file}:`, error.message);
}
}
}
}การแปลงรูปแบบแบบกลุ่ม
javascript
async function batchConvert(inputDir, outputDir, format) {
const files = await fs.readdir(inputDir);
for (const file of files) {
if (file.match(/\.(jpg|jpeg|png|webp)$/i)) {
const outputFile = file.replace(/\.[^.]+$/, `.${format}`);
try {
const image = sharp(`${inputDir}/${file}`);
switch (format) {
case 'jpg':
case 'jpeg':
await image.jpeg({ quality: 80 }).toFile(`${outputDir}/${outputFile}`);
break;
case 'png':
await image.png().toFile(`${outputDir}/${outputFile}`);
break;
case 'webp':
await image.webp({ quality: 80 }).toFile(`${outputDir}/${outputFile}`);
break;
case 'avif':
await image.avif({ quality: 80 }).toFile(`${outputDir}/${outputFile}`);
break;
}
console.log(`การแปลงเสร็จสิ้น: ${file} -> ${outputFile}`);
} catch (error) {
console.error(`การแปลงล้มเหลว ${file}:`, error.message);
}
}
}
}เครื่องมือการตรวจสอบ
ตรวจสอบความสมบูรณ์ของรูปภาพ
javascript
async function validateImage(filePath) {
try {
const metadata = await sharp(filePath).metadata();
// ตรวจสอบคุณสมบัติพื้นฐาน
if (!metadata.width || !metadata.height) {
return { valid: false, error: 'ขาดข้อมูลขนาด' };
}
if (metadata.width <= 0 || metadata.height <= 0) {
return { valid: false, error: 'ขนาดไม่ถูกต้อง' };
}
if (!metadata.format) {
return { valid: false, error: 'ขาดข้อมูลรูปแบบ' };
}
// ลองประมวลผลรูปภาพ
await sharp(filePath).resize(1, 1).toBuffer();
return { valid: true, metadata };
} catch (error) {
return { valid: false, error: error.message };
}
}ตรวจสอบขนาดไฟล์
javascript
const fs = require('fs');
function checkFileSize(filePath, maxSize = 10 * 1024 * 1024) { // 10MB
const stats = fs.statSync(filePath);
const sizeInMB = stats.size / (1024 * 1024);
return {
size: stats.size,
sizeInMB,
isValid: stats.size <= maxSize,
maxSizeInMB: maxSize / (1024 * 1024)
};
}