Skip to content

ইউটিলিটি 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 লাইসেন্সের অধীনে রিলিজ করা হয়েছে।