Rust में छवियों के साथ कार्य: लोडिंग से फ़िल्टरिंग तक
Rust एक आधुनिक सिस्टम भाषा है जो न केवल वेब-डेवलपमेंट और सिस्टम प्रोग्रामिंग में, बल्कि मल्टीमीडिया प्रसंस्करण के क्षेत्र में भी लोकप्रियता प्राप्त कर रही है। अपनी प्रदर्शन क्षमता और सुरक्षा के कारण, Rust छवियों से संबंधित कार्यों के लिए बहुत उपयुक्त है। इस लेख में हम प्रमुख लाइब्रेरी और टूल्स पर विचार करेंगे जो रास्टर ग्राफिक्स के साथ कुशलतापूर्वक कार्य करने में सक्षम बनाते हैं।
मुख्य लाइब्रेरी: image
image लाइब्रेरी Rust इकोसिस्टम में छवियों के साथ कार्य करने का डी-फैक्टो मानक है। यह दर्जनों फॉर्मेट (PNG, JPEG, GIF, BMP, WebP, TIFF और अन्य) को सपोर्ट करती है और छवियों को लोड करने, प्रसंस्करण और सहेजने के लिए एक सुविधाजनक API प्रदान करती है।
स्थापना — Cargo.toml में जोड़ें:
[dependencies]image = "0.25"छवियों को लोड करना और सहेजना
बुनियादी संचालन पर विचार करें: फ़ाइल खोलना, आकार बदलना और दूसरे फॉर्मेट में सहेजना।
use image::{DynamicImage, GenericImageView};use std::path::Path;
fn main() { // छवि लोड करें let img = image::open("input.jpg").expect("फ़ाइल खोलने में विफल");
// जानकारी प्रदर्शित करें println!("आकार: {}x{}", img.width(), img.height()); println!("रंग मोड: {:?}", img.color());
// आकार बदलें 200x200 (अनुपात बनाए रखते हुए) let resized = img.resize(200, 200, image::imageops::FilterType::Lanczos3);
// PNG में सहेजें resized.save("output.png").expect("सहेजने में त्रुटि");}प्रसंस्करण के मुख्य संचालन
image लाइब्रेरी imageops मॉड्यूल प्रदान करती है जिसमें तैयार फ़िल्टर और रूपांतरणों का सेट होता है।
- घुमाना और पलटना:
use image::DynamicImage;
fn rotate_and_flip(img: &DynamicImage) { // 90 डिग्री दक्षिणावर्त घुमाएँ let rotated = img.rotate90(); // क्षैतिज रूप से पलटें let flipped = img.fliph(); // लंबवत रूप से पलटें let flipped_v = img.flipv();}- क्रॉप करना:
fn crop_example(img: &DynamicImage) { // आयत क्रॉप करें: x=50, y=30, चौड़ाई=200, ऊँचाई=150 let cropped = img.crop_imm(50, 30, 200, 150); cropped.save("cropped.png").unwrap();}- चमक और कंट्रास्ट बदलना:
fn adjust_brightness(img: &DynamicImage) { // चमक 50 बढ़ाएँ (मान ऋणात्मक भी हो सकता है) let brighter = image::imageops::brighten(img, 50); // कंट्रास्ट बढ़ाएँ let contrasted = image::imageops::contrast(img, 1.5);}फ़िल्टर और प्रभाव
लाइब्रेरी में कई अंतर्निहित फ़िल्टर शामिल हैं। यहाँ सबसे उपयोगी फ़िल्टर के उदाहरण दिए गए हैं:
use image::imageops::FilterType;
fn apply_filters(img: &DynamicImage) { // गॉसियन ब्लर (sigma = 2.0) let blurred = image::imageops::blur(img, 2.0);
// शार्पनेस बढ़ाना let sharpened = image::imageops::unsharpen(img, 5.0, 2);
// ग्रेस्केल में बदलना let gray = img.grayscale();
// थ्रेशोल्ड फ़िल्टर लगाना (बाइनरीकरण) let threshold = image::imageops::threshold(img, 128);
// सभी परिणाम सहेजें blurred.save("blurred.png").unwrap(); sharpened.save("sharpened.png").unwrap(); gray.save("gray.png").unwrap();}सीधे पिक्सेल के साथ कार्य
यदि आपको प्रत्येक पिक्सेल पर पूर्ण नियंत्रण चाहिए, तो लाइब्रेरी कच्चे डेटा तक पहुँच प्रदान करती है:
use image::Rgba;
fn pixel_manipulation(mut img: image::RgbaImage) { for pixel in img.pixels_mut() { // रंगों को उल्टा करें pixel[0] = 255 - pixel[0]; // Red pixel[1] = 255 - pixel[1];