Node.js में इमेज प्रोसेसिंग: Sharp से resize और crop करना
आधुनिक वेब डेवलपमेंट में सर्वर-साइड पर इमेज प्रोसेसिंग एक आम काम है। Node.js में ग्राफिक्स के लिए कई शक्तिशाली लाइब्रेरी उपलब्ध हैं। इस लेख में हम Sharp लाइब्रेरी के बारे में विस्तार से जानेंगे - जो इमेज का आकार बदलने (resize) और क्रॉप (crop) करने का एक तेज़ और प्रभावी टूल है।
Sharp क्यों चुनें?
Sharp, libvips नेटिव लाइब्रेरी का उपयोग करता है, जो इसे Node.js के लिए सबसे परफॉरमेंट सॉल्यूशंस में से एक बनाता है। मुख्य फायदे:
- बहुत तेज़ प्रोसेसिंग स्पीड (शुद्ध JavaScript से कई गुना तेज़)
- कम मेमोरी खपत
- सभी लोकप्रिय फॉर्मेट्स का सपोर्ट: JPEG, PNG, WebP, AVIF, TIFF
- सरल और समझने में आसान API
- स्ट्रीम्स (streams) के साथ काम करने की सुविधा
इंस्टॉलेशन
Node.js प्रोजेक्ट में Sharp इंस्टॉल करना एक ही कमांड से हो जाता है:
npm install sharp
इंस्टॉल होने के बाद लाइब्रेरी उपयोग के लिए तैयार है। सुनिश्चित करें कि सिस्टम में नेटिव मॉड्यूल बिल्ड करने के लिए ज़रूरी डिपेंडेंसीज़ मौजूद हैं (आमतौर पर यह ऑटोमैटिक होता है)।
बेसिक resize (आकार बदलना)
resize() मेथड इमेज का आकार बदलने की अनुमति देता है। आइए मुख्य उपयोग के तरीके देखें।
उदाहरण 1: सरल resize
const sharp = require('sharp');
const path = require('path');
async function resizeImage() {
try {
await sharp('input.jpg')
.resize(300, 200) // चौड़ाई 300px, ऊंचाई 200px
.toFile('output.jpg');
console.log('इमेज का आकार सफलतापूर्वक बदल गया');
} catch (error) {
console.error('त्रुटि:', error);
}
}
resizeImage();
इस उदाहरण में इमेज को सटीक 300x200 पिक्सल में बदला जाएगा, जिससे अनुपात बिगड़ सकता है।
उदाहरण 2: अनुपात बनाए रखना
async function resizeWithProportions() {
await sharp('input.jpg')
.resize({
width: 400, // सिर्फ चौड़ाई
height: undefined, // ऊंचाई ऑटोमैटिक कैलकुलेट होगी
fit: 'inside' // अनुपात बनाए रखें
})
.toFile('output_inside.jpg');
console.log('अनुपात सुरक्षित रखा गया');
}
fit पैरामीटर कई वैल्यू ले सकता है:
cover— दिए गए आकार को पूरी तरह भरने के लिए इमेज क्रॉप करता है (डिफ़ॉल्ट)contain— अनुपात बनाए रखते हुए इमेज को दिए गए आकार में फिट करता हैfill— इमेज को दिए गए आकार में स्ट्रेच करता हैinside— इमेज को छोटा करता है ताकि वह दिए गए आकार में समा जाएoutside— इमेज को बड़ा करता है ताकि वह दिए गए आकार से बाहर निकल जाए
इमेज क्रॉप करना (crop)
Sharp क्रॉप करने के दो मुख्य तरीके प्रदान करता है: extract() मेथड और resize() के पैरामीटर्स के ज़रिए।
extract() मेथड
यह इमेज से दिए गए कोऑर्डिनेट्स के अनुसार एक आयताकार क्षेत्र काटने की अनुमति देता है:
async function cropImage() {
await sharp('input.jpg')
.extract({
left: 100, // बाएं से दूरी
top: 50, // ऊपर से दूरी
width: 300, // क्षेत्र की चौड़ाई
height: 200 // क्षेत्र की ऊंचाई
})
.toFile('cropped.jpg');
console.log('क्रॉपिंग पूरी हुई');
}
resize के साथ ऑटोमैटिक क्रॉप
अक्सर इमेज का आकार बदलने और साथ ही क्रॉप करने की ज़रूरत होती है। यह gravity या position पैरामीटर से किया जाता है:
async function cropAndResize() {
await sharp('input.jpg')
.resize(200, 200, {
fit: 'cover', // सटीक आकार में क्रॉप करें
position: 'center' // फोकस सेंटर पर
})
.toFile('avatar.jpg');