আউটপুট ফরম্যাট 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 ফরম্যাট
raw পিক্সেল ডেটা আউটপুট
javascript
// RGB raw ডেটা আউটপুট করুন
const rawData = await sharp('input.jpg')
.raw()
.toBuffer();
// RGBA raw ডেটা আউটপুট করুন
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);
});