ইউটিলিটি 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)
};
}