Skip to content

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)
  };
}

ลิงก์ที่เกี่ยวข้อง

เผยแพร่ภายใต้ใบอนุญาต Apache 2.0