ইমেজ প্রসেসিং API
Sharp সমৃদ্ধ ইমেজ প্রসেসিং ফাংশন প্রদান করে, যার মধ্যে রয়েছে রিসাইজ, ক্রপ, রোটেশন, ফিল্টার ইত্যাদি অপারেশন।
রিসাইজ (resize)
মৌলিক ব্যবহার
javascript
import sharp from 'sharp';
// নির্দিষ্ট আকারে রিসাইজ করুন
sharp('input.jpg')
.resize(300, 200)
.toFile('output.jpg');
// শুধুমাত্র প্রস্থ নির্দিষ্ট করুন, উচ্চতা স্বয়ংক্রিয়ভাবে গণনা হবে
sharp('input.jpg')
.resize(300)
.toFile('output.jpg');
// শুধুমাত্র উচ্চতা নির্দিষ্ট করুন, প্রস্থ স্বয়ংক্রিয়ভাবে গণনা হবে
sharp('input.jpg')
.resize(null, 200)
.toFile('output.jpg');রিসাইজ অপশন
javascript
sharp('input.jpg')
.resize(300, 200, {
// রিসাইজ অ্যালগরিদম
kernel: sharp.kernel.lanczos3,
// অবস্থান
position: 'center',
// ব্যাকগ্রাউন্ড রঙ
background: { r: 255, g: 255, b: 255, alpha: 1 },
// অ্যাসপেক্ট রেশিও রাখা হবে কিনা
fit: 'cover',
// বড় করা হবে না
withoutEnlargement: true,
// ছোট করা হবে না
withoutReduction: false
})
.toFile('output.jpg');রিসাইজ অ্যালগরিদম
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
// cover: অ্যাসপেক্ট রেশিও রাখুন, অতিরিক্ত অংশ ক্রপ করুন
sharp('input.jpg').resize(300, 200, { fit: 'cover' })
// contain: অ্যাসপেক্ট রেশিও রাখুন, ব্যাকগ্রাউন্ড যোগ করুন
sharp('input.jpg').resize(300, 200, { fit: 'contain' })
// fill: নির্দিষ্ট আকারে প্রসারিত করুন
sharp('input.jpg').resize(300, 200, { fit: 'fill' })
// inside: অ্যাসপেক্ট রেশিও রাখুন, মূল ইমেজের আকার অতিক্রম করবেন না
sharp('input.jpg').resize(300, 200, { fit: 'inside' })
// outside: অ্যাসপেক্ট রেশিও রাখুন, অন্তত নির্দিষ্ট আকারে পৌঁছান
sharp('input.jpg').resize(300, 200, { fit: 'outside' })ক্রপ (extract)
javascript
// নির্দিষ্ট এলাকা ক্রপ করুন
sharp('input.jpg')
.extract({ left: 100, top: 100, width: 300, height: 200 })
.toFile('output.jpg');
// ক্রপ করুন এবং রিসাইজ করুন
sharp('input.jpg')
.extract({ left: 100, top: 100, width: 300, height: 200 })
.resize(150, 100)
.toFile('output.jpg');রোটেশন (rotate)
javascript
// 90 ডিগ্রি রোটেশন করুন
sharp('input.jpg')
.rotate(90)
.toFile('output.jpg');
// রোটেশন করুন এবং ব্যাকগ্রাউন্ড রঙ নির্দিষ্ট করুন
sharp('input.jpg')
.rotate(45, { background: { r: 255, g: 255, b: 255, alpha: 1 } })
.toFile('output.jpg');ফ্লিপ (flip/flop)
javascript
// উল্লম্বভাবে ফ্লিপ করুন
sharp('input.jpg')
.flip()
.toFile('output.jpg');
// অনুভূমিকভাবে ফ্লিপ করুন
sharp('input.jpg')
.flop()
.toFile('output.jpg');ব্লার (blur)
javascript
// গাউসিয়ান ব্লার
sharp('input.jpg')
.blur(5)
.toFile('output.jpg');
// শার্পেনিং
sharp('input.jpg')
.sharpen()
.toFile('output.jpg');
// কাস্টম শার্পেনিং প্যারামিটার
sharp('input.jpg')
.sharpen({
sigma: 1,
flat: 1,
jagged: 2
})
.toFile('output.jpg');ফিল্টার (filters)
গ্রেস্কেল
javascript
sharp('input.jpg')
.grayscale()
.toFile('output.jpg');নেগেটিভ
javascript
sharp('input.jpg')
.negate()
.toFile('output.jpg');গামা করেকশন
javascript
sharp('input.jpg')
.gamma(2.2)
.toFile('output.jpg');ব্রাইটনেস/কনট্রাস্ট
javascript
sharp('input.jpg')
.modulate({
brightness: 1.2, // ব্রাইটনেস (0.1-2.0)
saturation: 0.8, // স্যাচুরেশন (0-2.0)
hue: 180 // হিউ (0-360)
})
.toFile('output.jpg');রঙ অপারেশন
টিন্ট
javascript
sharp('input.jpg')
.tint({ r: 255, g: 0, b: 0 })
.toFile('output.jpg');রঙ ম্যাট্রিক্স
javascript
sharp('input.jpg')
.recomb([
[0.3588, 0.7044, 0.1368],
[0.2990, 0.5870, 0.1140],
[0.0000, 0.0000, 1.0000]
])
.toFile('output.jpg');চ্যানেল অপারেশন
চ্যানেল আলাদা করা
javascript
// লাল চ্যানেল পান
sharp('input.jpg')
.extractChannel('red')
.toFile('red-channel.jpg');
// সব চ্যানেল পান
const channels = await sharp('input.jpg').separate();চ্যানেল মার্জ করা
javascript
// আলাদা চ্যানেল ফাইল থেকে মার্জ করুন
sharp('red.jpg')
.joinChannel(['green.jpg', 'blue.jpg'])
.toFile('merged.jpg');কম্বিনেশন অপারেশন
javascript
// চেইন অপারেশন
sharp('input.jpg')
.resize(800, 600)
.rotate(90)
.blur(2)
.sharpen()
.jpeg({ quality: 80 })
.toFile('output.jpg');পারফরমেন্স অপ্টিমাইজেশন
স্ট্রিম প্রসেসিং
javascript
const fs = require('fs');
fs.createReadStream('input.jpg')
.pipe(sharp().resize(300, 200))
.pipe(fs.createWriteStream('output.jpg'));ব্যাচ প্রসেসিং
javascript
const sharp = require('sharp');
const fs = require('fs').promises;
async function processImages() {
const files = await fs.readdir('./images');
const promises = files
.filter(file => file.endsWith('.jpg'))
.map(async file => {
await sharp(`./images/${file}`)
.resize(300, 200)
.jpeg({ quality: 80 })
.toFile(`./output/${file}`);
});
await Promise.all(promises);
}এরর হ্যান্ডলিং
javascript
try {
await sharp('input.jpg')
.resize(300, 200)
.toFile('output.jpg');
} catch (error) {
console.error('ইমেজ প্রসেসিং ব্যর্থ:', error.message);
}