Node.js में छवियों के साथ कार्य: resize और crop
आधुनिक वेब डेवलपमेंट में, सर्वर-साइड पर छवियों को प्रोसेस करने की आवश्यकता अक्सर उत्पन्न होती है: आकार बदलना, क्रॉप करना, फॉर्मेट बदलना। Node.js इन कार्यों के लिए कई शक्तिशाली लाइब्रेरी प्रदान करता है। इस लेख में हम दो सबसे लोकप्रिय लाइब्रेरी — Sharp (उच्च प्रदर्शन, libvips पर आधारित) और Jimp (शुद्ध JavaScript, मूल निर्भरता की आवश्यकता नहीं) पर चर्चा करेंगे।
1. स्थापना और तैयारी
शुरू करने के लिए एक नया प्रोजेक्ट बनाएं और एक लाइब्रेरी स्थापित करें:
mkdir image-processor && cd image-processornpm init -ynpm install sharp jimp2. Sharp के साथ आकार बदलना (resize)
Sharp एक तेज़ C लाइब्रेरी है जो प्रोडक्शन के लिए उपयुक्त है। यह स्ट्रीम प्रोसेसिंग और स्वचालित फॉर्मेट पहचान का समर्थन करता है।
const sharp = require('sharp');
// 300px चौड़ाई तक सरल resize (ऊंचाई अनुपात बनाए रखती है)sharp('input.jpg') .resize(300) .toFile('output-300.jpg') .then(() => console.log('तैयार!')) .catch(err => console.error(err));
// सटीक आकार 200x200 तक बलपूर्वक resize (विकृति के साथ)sharp('input.jpg') .resize(200, 200, { fit: 'fill' }) .toFile('output-fill.jpg');
// अनुपात बनाए रखते हुए स्मार्ट resize (केंद्र से क्रॉप)sharp('input.jpg') .resize(200, 200, { fit: 'cover', position: 'centre' }) .toFile('output-cover.jpg');3. Sharp के साथ क्रॉपिंग (crop)
extract विधि छवि के एक आयताकार क्षेत्र को काटने की अनुमति देती है।
const sharp = require('sharp');
// क्षेत्र काटें: left=100, top=50, width=400, height=300sharp('input.jpg') .extract({ left: 100, top: 50, width: 400, height: 300 }) .toFile('cropped.jpg') .then(info => console.log('क्रॉप किया गया:', info));4. Jimp के साथ कार्य (शुद्ध JavaScript)
Jimp Sharp की तुलना में धीमा है, लेकिन मूल मॉड्यूल के संकलन की आवश्यकता नहीं है — सरल कार्यों या सिस्टम पैकेज स्थापित करने के अधिकार के बिना वातावरण के लिए आदर्श।
const Jimp = require('jimp');
// 300px चौड़ाई तक resizeJimp.read('input.jpg') .then(image => { return image .resize(300, Jimp.AUTO) // AUTO अनुपात बनाए रखता है .writeAsync('output-jimp.jpg'); }) .then(() => console.log('Jimp resize तैयार')) .catch(err => console.error(err));
// निर्देशांक के साथ crop (क्रॉप)Jimp.read('input.jpg') .then(image => { return image .crop(100, 50, 400, 300) // x, y, width, height .writeAsync('cropped-jimp.jpg'); }) .catch(err => console.error(err));5. संयुक्त उदाहरण: एक बार में resize + crop
अक्सर पहले क्रॉप करना और फिर आकार कम करना आवश्यक होता है। Sharp आंतरिक पाइपलाइन के कारण इसे कुशलतापूर्वक करता है:
const sharp = require('sharp');
sharp('input.jpg') .extract({ left: 50, top: 30, width: 800, height: 600 }) .resize(400, 300, { fit: 'cover' }) .toFile('result.jpg') .then(info => console.log('अंतिम आकार:', info.width, 'x', info.height));6. Sharp बनाम Jimp तुलना
- प्रदर्शन: Sharp बड़ी फ़ाइलों के लिए 5-10 गुना तेज़ है।
- स्थापना: Jimp को मूल निर्भरता की आवश्यकता नहीं है (बस npm install)।
- कार्य: Sharp अधिक फॉर्मेट (heif, tiff, avif) और उन्नत फ़िल्टर का समर्थन करता है।
- स्ट्रीम प्रोसेसिंग: Sharp Node.js स्ट्रीम (pipe) के साथ काम करता है, Jimp केवल बफ़र्स के साथ।
- अनुशंसा: उच्च-लोड सेवाओं के लिए Sharp चुनें। सरल स्क्रिप्ट या शैक्षिक परियोजनाओं के लिए Jimp चुनें।
7. बफ़र के साथ कार्य (फ़ाइल में सहेजे बिना)
अक्सर छवियाँ HTTP के माध्यम से आती हैं या मेमोरी में संग्रहीत होती हैं। दोनों लाइब्रेरी Buffer के साथ काम करने का समर्थन करती हैं:
const sharp = requ