Skip to content

आउटपुट प्रारूप API

Sharp कई छवि आउटपुट प्रारूपों का समर्थन करता है, प्रत्येक प्रारूप की अपनी विशिष्ट विकल्प और उपयोग हैं।

JPEG प्रारूप

मूल उपयोग

javascript
import sharp from 'sharp';

sharp('input.png')
  .jpeg()
  .toFile('output.jpg');

JPEG विकल्प

javascript
sharp('input.png')
  .jpeg({
    quality: 80,           // गुणवत्ता (1-100)
    progressive: false,     // प्रगतिशील JPEG
    chromaSubsampling: '4:4:4', // क्रोमा सबसैंपलिंग
    mozjpeg: false,        // mozjpeg एन्कोडर का उपयोग करें
    trellisQuantisation: false, // ट्रेलिस क्वांटिज़ेशन
    overshootDeringing: false,  // ओवरशूट डीरिंगिंग
    optimiseScans: false,  // स्कैन अनुकूलन
    quantisationTable: 0   // क्वांटिज़ेशन तालिका
  })
  .toFile('output.jpg');

गुणवत्ता सेटिंग

javascript
// उच्च गुणवत्ता
sharp('input.png').jpeg({ quality: 95 })

// मध्यम गुणवत्ता
sharp('input.png').jpeg({ quality: 80 })

// निम्न गुणवत्ता (छोटी फ़ाइल)
sharp('input.png').jpeg({ quality: 50 })

PNG प्रारूप

मूल उपयोग

javascript
sharp('input.jpg')
  .png()
  .toFile('output.png');

PNG विकल्प

javascript
sharp('input.jpg')
  .png({
    progressive: false,     // प्रगतिशील PNG
    compressionLevel: 6,    // संपीड़न स्तर (0-9)
    adaptiveFiltering: false, // अनुकूली फ़िल्टरिंग
    palette: false,         // पैलेट मोड
    quality: 100,          // गुणवत्ता (केवल पैलेट मोड के लिए)
    colours: 256,          // रंग संख्या (केवल पैलेट मोड के लिए)
    dither: 0.5,          // डिथर (0-1)
    force: false           // PNG आउटपुट को मजबूर करें
  })
  .toFile('output.png');

पारदर्शिता प्रसंस्करण

javascript
// पारदर्शिता बनाए रखें
sharp('input.png')
  .png()
  .toFile('output.png');

// सफेद पृष्ठभूमि जोड़ें
sharp('input.png')
  .flatten({ background: { r: 255, g: 255, b: 255 } })
  .png()
  .toFile('output.png');

WebP प्रारूप

मूल उपयोग

javascript
sharp('input.jpg')
  .webp()
  .toFile('output.webp');

WebP विकल्प

javascript
sharp('input.jpg')
  .webp({
    quality: 80,           // गुणवत्ता (1-100)
    alphaQuality: 100,     // पारदर्शिता गुणवत्ता (1-100)
    lossless: false,       // हानिरहित संपीड़न
    nearLossless: false,   // निकट-हानिरहित संपीड़न
    smartSubsample: false, // स्मार्ट सबसैंपलिंग
    reductionEffort: 4,    // संपीड़न प्रयास (0-6)
    mixed: false,          // मिश्रित मोड
    force: false           // WebP आउटपुट को मजबूर करें
  })
  .toFile('output.webp');

हानिरहित WebP

javascript
// हानिरहित संपीड़न
sharp('input.png')
  .webp({ lossless: true })
  .toFile('output.webp');

// निकट-हानिरहित संपीड़न
sharp('input.png')
  .webp({ nearLossless: true, quality: 60 })
  .toFile('output.webp');

AVIF प्रारूप

मूल उपयोग

javascript
sharp('input.jpg')
  .avif()
  .toFile('output.avif');

AVIF विकल्प

javascript
sharp('input.jpg')
  .avif({
    quality: 80,           // गुणवत्ता (1-100)
    lossless: false,       // हानिरहित संपीड़न
    effort: 4,             // संपीड़न प्रयास (0-6)
    chromaSubsampling: '4:4:4', // क्रोमा सबसैंपलिंग
    force: false           // AVIF आउटपुट को मजबूर करें
  })
  .toFile('output.avif');

TIFF प्रारूप

मूल उपयोग

javascript
sharp('input.jpg')
  .tiff()
  .toFile('output.tiff');

TIFF विकल्प

javascript
sharp('input.jpg')
  .tiff({
    quality: 80,           // गुणवत्ता (1-100)
    compression: 'jpeg',   // संपीड़न विधि
    pyramid: false,        // पिरामिड मोड
    tile: false,           // टाइल मोड
    tileSize: 256,         // टाइल आकार
    xres: 1,              // X रिज़ॉल्यूशन
    yres: 1,              // Y रिज़ॉल्यूशन
    resolutionUnit: 'inch', // रिज़ॉल्यूशन इकाई
    force: false           // TIFF आउटपुट को मजबूर करें
  })
  .toFile('output.tiff');

संपीड़न विकल्प

javascript
// JPEG संपीड़न
sharp('input.jpg').tiff({ compression: 'jpeg' })

// LZW संपीड़न
sharp('input.jpg').tiff({ compression: 'lzw' })

// कोई संपीड़न नहीं
sharp('input.jpg').tiff({ compression: 'none' })

// Deflate संपीड़न
sharp('input.jpg').tiff({ compression: 'deflate' })

कच्चा प्रारूप (raw)

कच्चा पिक्सेल डेटा आउटपुट

javascript
// RGB कच्चा डेटा आउटपुट
const rawData = await sharp('input.jpg')
  .raw()
  .toBuffer();

// RGBA कच्चा डेटा आउटपुट
const rawData = await sharp('input.jpg')
  .ensureAlpha()
  .raw()
  .toBuffer();

बहु-प्रारूप आउटपुट

एक साथ कई प्रारूप आउटपुट

javascript
const image = sharp('input.jpg').resize(800, 600);

// कई प्रारूप आउटपुट
await Promise.all([
  image.clone().jpeg({ quality: 80 }).toFile('output.jpg'),
  image.clone().png().toFile('output.png'),
  image.clone().webp({ quality: 80 }).toFile('output.webp'),
  image.clone().avif({ quality: 80 }).toFile('output.avif')
]);

रेस्पॉन्सिव छवि

javascript
async function generateResponsiveImages(inputPath) {
  const sizes = [320, 640, 1280, 1920];
  const formats = ['jpeg', 'webp', 'avif'];
  
  const promises = [];
  
  for (const size of sizes) {
    for (const format of formats) {
      const image = sharp(inputPath).resize(size);
      
      switch (format) {
        case 'jpeg':
          promises.push(
            image.clone().jpeg({ quality: 80 })
              .toFile(`output-${size}.jpg`)
          );
          break;
        case 'webp':
          promises.push(
            image.clone().webp({ quality: 80 })
              .toFile(`output-${size}.webp`)
          );
          break;
        case 'avif':
          promises.push(
            image.clone().avif({ quality: 80 })
              .toFile(`output-${size}.avif`)
          );
          break;
      }
    }
  }
  
  await Promise.all(promises);
}

प्रारूप पहचान

फ़ाइल एक्सटेंशन के अनुसार स्वचालित प्रारूप चयन

javascript
function getOutputFormat(filename) {
  const ext = filename.split('.').pop().toLowerCase();
  
  switch (ext) {
    case 'jpg':
    case 'jpeg':
      return 'jpeg';
    case 'png':
      return 'png';
    case 'webp':
      return 'webp';
    case 'avif':
      return 'avif';
    case 'tiff':
    case 'tif':
      return 'tiff';
    default:
      return 'jpeg';
  }
}

async function convertImage(inputPath, outputPath) {
  const format = getOutputFormat(outputPath);
  const image = sharp(inputPath);
  
  switch (format) {
    case 'jpeg':
      await image.jpeg({ quality: 80 }).toFile(outputPath);
      break;
    case 'png':
      await image.png().toFile(outputPath);
      break;
    case 'webp':
      await image.webp({ quality: 80 }).toFile(outputPath);
      break;
    case 'avif':
      await image.avif({ quality: 80 }).toFile(outputPath);
      break;
    case 'tiff':
      await image.tiff({ compression: 'jpeg' }).toFile(outputPath);
      break;
  }
}

प्रदर्शन अनुकूलन

स्ट्रीम आउटपुट

javascript
const fs = require('fs');

// स्ट्रीम प्रसंस्करण
fs.createReadStream('input.jpg')
  .pipe(sharp().jpeg({ quality: 80 }))
  .pipe(fs.createWriteStream('output.jpg'));

मेमोरी अनुकूलन

javascript
// फ़ाइल के बजाय Buffer का उपयोग करें
const buffer = await sharp('input.jpg')
  .jpeg({ quality: 80 })
  .toBuffer();

// सीधे प्रतिक्रिया में आउटपुट
app.get('/image', async (req, res) => {
  const buffer = await sharp('input.jpg')
    .resize(300, 200)
    .jpeg({ quality: 80 })
    .toBuffer();
    
  res.set('Content-Type', 'image/jpeg');
  res.send(buffer);
});

संबंधित लिंक

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