العمل مع الصور في Rust: image، photon-rs ومكتبات أخرى

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع الصور في Rust: المكتبات والأدوات والأمثلة العملية



Rust هي لغة برمجة أنظمة حديثة تُستخدم بشكل متزايد في المهام المتعلقة بمعالجة الرسومات والصور. بفضل الأداء العالي، والتعامل الآمن مع الذاكرة، والنظام البيئي الغني من الحزم (crates)، تُعد Rust مثالية لإنشاء أدوات معالجة الصور: بدءًا من محولات التنسيقات البسيطة وصولاً إلى المرشحات المعقدة وخوارزميات الرؤية الحاسوبية.



في هذه المقالة، سنستعرض المكتبات الرئيسية للعمل مع الصور في Rust، ونحلل إمكانياتها، ونقدم أمثلة عملية للكود.



المكتبات الرئيسية للعمل مع الصور



يقدم النظام البيئي لـ Rust العديد من الحزم (crates) الناضجة لمعالجة الصور. أشهرها:



  • image — مكتبة أساسية لتحميل الصور وحفظها وإجراء التحويلات الأساسية. تدعم تنسيقات PNG وJPEG وGIF وBMP وICO وTIFF وغيرها.
  • photon-rs — مكتبة عالية الأداء لتطبيق مرشحات الصور والتأثيرات. تعمل على Rust وWebAssembly.
  • imageproc — امتداد لـ image يوفر خوارزميات متقدمة: تحويلات Hough، والتجزئة، والعمليات المورفولوجية.
  • rusttype — مكتبة للعمل مع الخطوط وعرض النص على الصور.


التثبيت والإعداد



أضف التبعيات إلى ملف Cargo.toml:



[dependencies]image = "0.25"photon-rs = "0.3"imageproc = "0.25"


تحميل الصورة وتغيير حجمها وحفظها



لنبدأ بمثال أساسي — سنقوم بتحميل صورة، وتقليل حجمها إلى النصف، وحفظها بتنسيق مختلف.



use image::{DynamicImage, GenericImageView, ImageFormat};use std::fs::File;

fn main() -> Result<(), Box<dyn std::error::Error>> { // تحميل الصورة let img = image::open("input.jpg")?; println!("الحجم: {} x {}", img.width(), img.height());

// تغيير الحجم إلى نصف الحجم الأصلي let resized = img.resize_exact( img.width() / 2, img.height() / 2, image::imageops::FilterType::Lanczos3 );

// الحفظ بتنسيق PNG let mut output = File::create("output.png")?; resized.write_to(&mut output, ImageFormat::Png)?;

println!("تم! تم الحفظ كـ output.png"); Ok(())}


تطبيق مرشحات الصور باستخدام photon-rs



تتيح مكتبة photon-rs تطبيق المرشحات بسرعة، وتصحيح الألوان، وإضافة التأثيرات.



use photon_rs::PhotonImage;use photon_rs::transform::resize;use photon_rs::filters::filter;

fn main() { // فتح الصورة let mut img = photon_rs::open_image("input.jpg");

// تطبيق مرشح "سيبيا" filter(&mut img, "sepia", 1.0);

// تغيير السطوع photon_rs::channels::brighten(&mut img, 30);

// تغيير الحجم let resized = resize(&img, 800, 600, photon_rs::transform::SamplingFilter::Nearest);

// حفظ النتيجة photon_rs::save_image(resized, "output_photon.jpg"); println!("تم تطبيق المرشح، تم الحفظ في output_photon.jpg");}


العمل مع البكسلات والرسم



أحيانًا نحتاج إلى التعامل المباشر مع البكسلات أو رسم الأشكال البدائية. لهذا نستخدم image مع imageproc.



use image::{RgbImage, Rgb};use imageproc::drawing::draw_filled_circle_mut;

fn main() { // إنشاء صورة فارغة 400x300 بخلفية بيضاء let mut img = RgbImage::new(400, 300);

// تلوين الخلفية باللون الأزرق الفاتح for pixel in img.pixels_mut() { *pixel = Rgb([200, 220, 255]); }

// رسم دائرة حمراء (x=200, y=150, نصف القطر=80) draw_filled_circle_mut( &mut img,\

توصيات