Rust में इमेज प्रोसेसिंग: resize और crop
Rust एक आधुनिक सिस्टम प्रोग्रामिंग भाषा है, जिसका उपयोग उच्च प्रदर्शन और विश्वसनीयता की आवश्यकता वाले कार्यों के लिए तेजी से किया जा रहा है। इमेज प्रोसेसिंग भी इसका अपवाद नहीं है। इस लेख में, हम Rust इकोसिस्टम का उपयोग करके दो मुख्य ऑपरेशनों - आकार बदलना (resize) और क्रॉप करना (crop) - पर चर्चा करेंगे। मुख्य लाइब्रेरीज़: image (लोड करना, सेव करना, बुनियादी हेरफेर) और imageproc (उन्नत प्रोसेसिंग)।
इमेज के साथ काम करने के लिए Rust क्यों?
Rust प्रदान करता है:
- सुरक्षित मेमोरी प्रबंधन — मेमोरी लीक और डेटा रेस से मुक्त।
- अधिकतम प्रदर्शन — C/C++ के बराबर।
- समृद्ध इकोसिस्टम —
imagecrate JPEG, PNG, GIF, BMP, WEBP और अन्य फॉर्मेट को सपोर्ट करता है। - समानांतरता — मल्टी-कोर प्रोसेसर पर प्रोसेसिंग को आसानी से स्केल करें।
डिपेंडेंसीज़ इंस्टॉल करना
Cargo.toml में जोड़ें:
[dependencies]image = "0.25"imageproc = "0.25" # उन्नत फिल्टर के लिए (वैकल्पिक)नवीनतम संस्करणों के लिए crates.io देखें।
इमेज लोड करना और सेव करना
एक बुनियादी उदाहरण से शुरू करते हैं - फ़ाइल खोलना और उसकी कॉपी सेव करना:
use image::{GenericImageView, ImageFormat};
fn main() -> Result<(), Box<dyn std::error::Error>> { // इमेज लोड करें let img = image::open("input.jpg")?; // आयाम प्रदर्शित करें println!("चौड़ाई: {}, ऊँचाई: {}", img.width(), img.height()); // दूसरे फॉर्मेट में सेव करें img.save("output.png")?; Ok(())}image::open मेथड फ़ाइल के एक्सटेंशन या सामग्री के आधार पर स्वचालित रूप से फॉर्मेट का पता लगाता है।
आकार बदलना (resize)
resize फ़ंक्शन नई चौड़ाई और ऊँचाई, साथ ही एक इंटरपोलेशन फिल्टर लेता है। उपलब्ध फिल्टर: Nearest, Triangle, CatmullRom, Gaussian, Lanczos3 और अन्य।
use image::{imageops::FilterType, GenericImageView};
fn resize_image(path: &str, new_width: u32, new_height: u32) -> Result<(), Box<dyn std::error::Error>> { let img = image::open(path)?; // Lanczos3 फिल्टर के साथ आकार बदलें (उच्च गुणवत्ता) let resized = img.resize(new_width, new_height, FilterType::Lanczos3); // परिणाम सेव करें resized.save("resized.jpg")?; println!("आकार बदला गया: {}x{} → {}x{}", img.width(), img.height(), new_width, new_height); Ok(())}सुझाव: तेज़ प्रोसेसिंग के लिए FilterType::Nearest (कोई इंटरपोलेशन नहीं) का उपयोग करें, अधिकतम गुणवत्ता के लिए Lanczos3 का उपयोग करें।
आनुपातिक आकार बदलना
पहलू अनुपात बनाए रखने के लिए, resize_to_fill (क्षेत्र भरता है) या resize_to_fit (आयत में फिट करता है) का उपयोग करें:
use image::imageops::FilterType;
fn resize_proportional(path: &str, max_width: u32, max_height: u32) -> Result<(), Box<dyn std::error::Error>> { let img = image::open(path)?; // आयत में फिट करें (अनुपात बनाए रखते हुए) let fitted = img.resize_to_fit(max_width, max_height, FilterType::Triangle); fitted.save("fitted.jpg")?; // क्षेत्र भरें (अतिरिक्त क्रॉप करेगा) let filled = img.resize_to_fill(max_width, max_height, FilterType::Triangle); filled.save("filled.jpg")?; Ok(())}इमेज क्रॉप करना (crop)
क्रॉपिंग crop मेथड के माध्यम से की जाती है, जो ऊपरी बाएँ कोने के निर्देशांक (x, y) और क्षेत्र के आयाम लेता है:
use image::Gener पुस्तकालय में भी
Java Management Extensions (JMX) — Java अनुप्रयोगों की निगरानी
जावा में मशीन लर्निंग: मॉडल विकास के लिए लाइब्रेरीज़ का अवलोकन
जावास्क्रिप्ट (Node.js) के लिए लॉगिंग: सर्वोत्तम समाधान
TypeScript में डेटाबेस माइग्रेशन: TypeORM, Prisma और Drizzle
TypeScript के लिए CLI फ्रेमवर्क: पूर्ण अवलोकन और उपयोग उदाहरण