Rust में इमेज प्रोसेसिंग: image लाइब्रेरी से resize और crop करना सीखें

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Rust में इमेज प्रोसेसिंग: image लाइब्रेरी से resize और crop

Rust एक आधुनिक सिस्टम प्रोग्रामिंग भाषा है जो उच्च प्रदर्शन और सुरक्षा वाले कार्यों में लोकप्रिय हो रही है। ऐसा ही एक कार्य है इमेज प्रोसेसिंग। इस लेख में हम विस्तार से जानेंगे कि Rust में शक्तिशाली और सुविधाजनक image लाइब्रेरी का उपयोग करके इमेज का आकार कैसे बदलें (resize) और क्रॉप (crop) करें। आप सीखेंगे कि लाइब्रेरी को कैसे इंस्टॉल करें, इमेज लोड करें, ट्रांसफॉर्मेशन लागू करें और परिणाम सेव करें।

image लाइब्रेरी को इंस्टॉल और इम्पोर्ट करना

image लाइब्रेरी Rust इकोसिस्टम में रास्टर इमेज के साथ काम करने का डी-फैक्टो मानक है। यह कई फॉर्मेट (PNG, JPEG, GIF, BMP, WEBP और अन्य) को सपोर्ट करती है और प्रोसेसिंग के लिए कई फंक्शन प्रदान करती है।

शुरू करने के लिए, Cargo.toml फ़ाइल में डिपेंडेंसी जोड़ें:

[dependencies]
image = "0.25"

इसके बाद, कोड में आवश्यक मॉड्यूल इम्पोर्ट करें:

use std::path::Path;
use image::{open, DynamicImage, GenericImageView, imageops::FilterType};

इमेज लोड और सेव करना

पहला कदम फ़ाइल से इमेज लोड करना है। लाइब्रेरी एक्सटेंशन के आधार पर फॉर्मेट को ऑटोमैटिकली पहचान लेती है। एक बेसिक उदाहरण देखें:

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // इमेज लोड करें
    let img = open("input.jpg")?;
    println!("साइज़: {:?}", img.dimensions());
    // दूसरे फॉर्मेट में सेव करें
    img.save("output.png")?;
    Ok(())
}

open() मेथड DynamicImage लौटाता है — एक एनुम जो इमेज को कई इंटरनल फॉर्मेट (RGB8, RGBA8, Gray8 आदि) में स्टोर कर सकता है। dimensions() मेथड (u32, u32) टपल लौटाता है — चौड़ाई और ऊंचाई।

आकार बदलना (resize)

resize() फंक्शन नई चौड़ाई, ऊंचाई और फ़िल्टर टाइप लेता है। फ़िल्टर परिणाम की गुणवत्ता और गति को प्रभावित करता है। मुख्य फ़िल्टर:

  • Nearest — तेज़, लेकिन कम गुणवत्ता (पिक्सेलेशन)।
  • Lanczos3 — उच्च गुणवत्ता, लेकिन धीमा।
  • CatmullRom — गति और गुणवत्ता का अच्छा संतुलन।
  • Gaussian — छोटा करने पर इमेज को धुंधला करता है।

800x600 पिक्सल में आकार बदलने का उदाहरण:

use image::imageops::FilterType;

fn resize_example() -> Result<(), Box<dyn std::error::Error>> {
    let img = open("input.jpg")?;
    let resized = img.resize(800, 600, FilterType::Lanczos3);
    resized.save("resized.jpg")?;
    println!("नया साइज़: {:?}", resized.dimensions());
    Ok(())
}

अनुपात बनाए रखने के लिए, resize_to_fill() (एरिया भरता है, अतिरिक्त क्रॉप करता है) या resize_to_fit() (दिए गए साइज़ में फिट करता है, खाली जगह छोड़ता है) का उपयोग करें। उदाहरण:

// 400x400 आयत में फिट करें, अनुपात बनाए रखें
let fitted = img.resize_to_fit(400, 400, FilterType::CatmullRom);
fitted.save("fitted.jpg")?;

// 400x400 आयत भरें, किनारों को क्रॉप करें
let filled = img.resize_to_fill(400, 400, FilterType::Lanczos3);
filled.save("filled.jpg")?;

इमेज क्रॉप करना (crop)

क्रॉप crop() मेथड से किया जाता है, जो ऊपरी बाएँ कोने के निर्देशांक (x, y), साथ ही क्षेत्र की चौड़ाई और ऊंचाई लेता है। ध्यान दें: निर्देशांक और साइज़ मूल इमेज की सीमा से बाहर नहीं होने चाहिए, वरना पैनिक होगा।

300x200 साइज़ के केंद्रीय भाग को क्रॉप करने का उदाहरण:

fn crop_example() -> Result<(), Box<dyn std::error::Error>> {
    let img = open("input.jpg")?;
    let (width, height) = img.dimensions();

    // केंद्र के निर्देशांक की गणना करें
    let x = (width - 300) / 2;
    let y = (height - 200) / 2;
    let cropped = img.crop(x, y, 300, 200);
    cropped.save("cropped.jpg")?;
    println!("क्रॉप किया गया साइज़: {:?}", cropped.dimensions());
    Ok(())
}

यह तरीका प्रोफ़ाइल फोटो या थंबनेल बनाने के लिए बहुत उपयोगी है।

निष्कर्ष

इस लेख में हमने Rust में image लाइब्रेरी का उपयोग करके इमेज को resize और crop करना सीखा। ये बुनियादी ऑपरेशन कई एप्लिकेशनों के लिए आवश्यक हैं — वेब सर्वर से लेकर डेस्कटॉप टूल्स तक। Rust की उच्च प्रदर्शन क्षमता और image लाइब्रेरी की सुविधा इसे इमेज प्रोसेसिंग के लिए एक बेहतरीन विकल्प बनाती है।

अधिक जानकारी के लिए आधिकारिक दस्तावेज़ देखें। अपने प्रोजेक्ट में इन तकनीकों का उपयोग करके देखें!

अनुशंसाएँ