Skip to content

उन्नत उदाहरण

यहां Sharp के उन्नत उपयोग के कुछ उदाहरण दिए गए हैं, जिसमें जटिल छवि प्रसंस्करण ऑपरेशन शामिल हैं।

छवि संयोजन

वॉटरमार्क जोड़ना

javascript
import sharp from 'sharp';

// टेक्स्ट वॉटरमार्क जोड़ें
await sharp('input.jpg')
  .composite([
    {
      input: Buffer.from(`
        <svg width="200" height="100">
          <text x="10" y="50" font-family="Arial" font-size="24" fill="white">
            Watermark
          </text>
        </svg>
      `),
      top: 10,
      left: 10
    }
  ])
  .jpeg()
  .toFile('output.jpg');

छवि ओवरले

javascript
// कई छवियों को ओवरले करें
await sharp('background.jpg')
  .composite([
    {
      input: 'overlay1.png',
      top: 100,
      left: 100
    },
    {
      input: 'overlay2.png',
      top: 200,
      left: 200
    }
  ])
  .jpeg()
  .toFile('output.jpg');

चैनल ऑपरेशन

चैनल अलग करना

javascript
// RGB चैनल अलग करें
const channels = await sharp('input.jpg').separate();

// प्रत्येक चैनल सहेजें
await sharp(channels[0]).toFile('red-channel.jpg');
await sharp(channels[1]).toFile('green-channel.jpg');
await sharp(channels[2]).toFile('blue-channel.jpg');

चैनल मर्ज करना

javascript
// अलग-अलग चैनल फ़ाइलों से मर्ज करें
await sharp('red-channel.jpg')
  .joinChannel(['green-channel.jpg', 'blue-channel.jpg'])
  .toFile('merged.jpg');

रंग स्थान रूपांतरण

RGB से CMYK

javascript
await sharp('input.jpg')
  .toColourspace(sharp.colourspace.cmyk)
  .tiff()
  .toFile('output.tiff');

Lab रंग स्थान में रूपांतरण

javascript
await sharp('input.jpg')
  .toColourspace(sharp.colourspace.lab)
  .tiff()
  .toFile('output.tiff');

उन्नत फ़िल्टर

कस्टम तीक्ष्ण

javascript
await sharp('input.jpg')
  .sharpen({
    sigma: 1,
    flat: 1,
    jagged: 2
  })
  .toFile('output.jpg');

गामा सुधार

javascript
await sharp('input.jpg')
  .gamma(2.2)
  .toFile('output.jpg');

टिंट

javascript
await sharp('input.jpg')
  .tint({ r: 255, g: 0, b: 0 })
  .toFile('output.jpg');

बहु-पृष्ठ छवि प्रसंस्करण

TIFF बहु-पृष्ठ प्रसंस्करण

javascript
// सभी पृष्ठों को संसाधित करें
await sharp('multi-page.tiff', { pages: -1 })
  .resize(800, 600)
  .tiff()
  .toFile('output.tiff');

// विशिष्ट पृष्ठ संसाधित करें
await sharp('multi-page.tiff', { pages: 0 })
  .resize(800, 600)
  .jpeg()
  .toFile('page0.jpg');

PDF प्रसंस्करण

javascript
// PDF पहला पृष्ठ संसाधित करें
await sharp('document.pdf', { pages: 0 })
  .resize(800, 600)
  .jpeg()
  .toFile('page0.jpg');

रेस्पॉन्सिव छवि उत्पन्न करना

कई आकार उत्पन्न करना

javascript
async function generateResponsiveImages(inputPath) {
  const sizes = [
    { width: 320, height: 240, suffix: 'small' },
    { width: 640, height: 480, suffix: 'medium' },
    { width: 1280, height: 960, suffix: 'large' },
    { width: 1920, height: 1440, suffix: 'xlarge' }
  ];
  
  const promises = sizes.map(async ({ width, height, suffix }) => {
    await sharp(inputPath)
      .resize(width, height, { fit: 'cover' })
      .jpeg({ quality: 80 })
      .toFile(`output-${suffix}.jpg`);
  });
  
  await Promise.all(promises);
}

कई प्रारूप उत्पन्न करना

javascript
async function generateMultipleFormats(inputPath) {
  const formats = [
    { format: 'jpeg', quality: 80, ext: 'jpg' },
    { format: 'webp', quality: 80, ext: 'webp' },
    { format: 'avif', quality: 80, ext: 'avif' }
  ];
  
  const promises = formats.map(async ({ format, quality, ext }) => {
    const image = sharp(inputPath).resize(800, 600);
    
    switch (format) {
      case 'jpeg':
        await image.jpeg({ quality }).toFile(`output.${ext}`);
        break;
      case 'webp':
        await image.webp({ quality }).toFile(`output.${ext}`);
        break;
      case 'avif':
        await image.avif({ quality }).toFile(`output.${ext}`);
        break;
    }
  });
  
  await Promise.all(promises);
}

छवि विश्लेषण

छवि सांख्यिकी जानकारी प्राप्त करना

javascript
async function analyzeImage(filePath) {
  const metadata = await sharp(filePath).metadata();
  const stats = await sharp(filePath).stats();
  
  return {
    metadata,
    stats: {
      isOpaque: stats.isOpaque,
      dominant: stats.dominant,
      channels: stats.channels
    }
  };
}

छवि प्रकार का पता लगाना

javascript
async function detectImageType(filePath) {
  const metadata = await sharp(filePath).metadata();
  
  return {
    format: metadata.format,
    hasAlpha: metadata.hasAlpha,
    isOpaque: metadata.isOpaque,
    channels: metadata.channels,
    colorSpace: metadata.space
  };
}

उन्नत काटना

स्मार्ट काटना

javascript
async function smartCrop(inputPath, outputPath, width, height) {
  // छवि जानकारी प्राप्त करें
  const metadata = await sharp(inputPath).metadata();
  
  // काटने वाले क्षेत्र की गणना करें
  const aspectRatio = width / height;
  const imageAspectRatio = metadata.width / metadata.height;
  
  let cropWidth, cropHeight, left, top;
  
  if (aspectRatio > imageAspectRatio) {
    // लक्ष्य अधिक चौड़ा है, ऊंचाई के अनुसार
    cropHeight = metadata.height;
    cropWidth = cropHeight * aspectRatio;
    top = 0;
    left = (metadata.width - cropWidth) / 2;
  } else {
    // लक्ष्य अधिक ऊंचा है, चौड़ाई के अनुसार
    cropWidth = metadata.width;
    cropHeight = cropWidth / aspectRatio;
    left = 0;
    top = (metadata.height - cropHeight) / 2;
  }
  
  await sharp(inputPath)
    .extract({ left: Math.round(left), top: Math.round(top), width: Math.round(cropWidth), height: Math.round(cropHeight) })
    .resize(width, height)
    .toFile(outputPath);
}

छवि अनुकूलन

स्वचालित अनुकूलन

javascript
async function autoOptimize(inputPath, outputPath) {
  const metadata = await sharp(inputPath).metadata();
  
  let image = sharp(inputPath);
  
  // छवि प्रकार के अनुसार सर्वोत्तम प्रारूप चुनें
  if (metadata.hasAlpha) {
    // पारदर्शिता है, PNG का उपयोग करें
    image = image.png();
  } else {
    // कोई पारदर्शिता नहीं है, JPEG का उपयोग करें
    image = image.jpeg({ quality: 80, progressive: true });
  }
  
  await image.toFile(outputPath);
}

प्रगतिशील JPEG

javascript
await sharp('input.jpg')
  .jpeg({ 
    quality: 80, 
    progressive: true,
    mozjpeg: true 
  })
  .toFile('output.jpg');

बैच उन्नत प्रसंस्करण

बैच वॉटरमार्क

javascript
const fs = require('fs').promises;

async function batchWatermark(inputDir, outputDir, watermarkPath) {
  const files = await fs.readdir(inputDir);
  
  for (const file of files) {
    if (file.match(/\.(jpg|jpeg|png|webp)$/i)) {
      try {
        await sharp(path.join(inputDir, file))
          .composite([
            {
              input: watermarkPath,
              top: 10,
              left: 10
            }
          ])
          .jpeg({ quality: 80 })
          .toFile(path.join(outputDir, `watermarked_${file}`));
        
        console.log(`वॉटरमार्क जोड़ना पूर्ण: ${file}`);
      } catch (error) {
        console.error(`${file} प्रसंस्करण विफल:`, error.message);
      }
    }
  }
}

बैच प्रारूप रूपांतरण और अनुकूलन

javascript
async function batchOptimize(inputDir, outputDir) {
  const files = await fs.readdir(inputDir);
  
  for (const file of files) {
    if (file.match(/\.(jpg|jpeg|png|webp)$/i)) {
      try {
        const metadata = await sharp(path.join(inputDir, file)).metadata();
        const image = sharp(path.join(inputDir, file));
        
        // छवि विशेषताओं के अनुसार सर्वोत्तम प्रारूप चुनें
        if (metadata.hasAlpha) {
          await image.png({ compressionLevel: 9 }).toFile(path.join(outputDir, file.replace(/\.[^.]+$/, '.png')));
        } else {
          await image.jpeg({ quality: 80, progressive: true }).toFile(path.join(outputDir, file.replace(/\.[^.]+$/, '.jpg')));
        }
        
        console.log(`अनुकूलन पूर्ण: ${file}`);
      } catch (error) {
        console.error(`${file} प्रसंस्करण विफल:`, error.message);
      }
    }
  }
}

संबंधित लिंक

Apache 2.0 लाइसेंस के तहत जारी किया गया।