आउटपुट प्रारूप 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);
});