العمل مع الصور في C# (.NET): دليل شامل

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

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

ابدأ الدورة

العمل مع الصور في C# (.NET): من الأساسيات إلى التقنيات المتقدمة



معالجة الصور هي إحدى المهام الأساسية في التطوير الحديث. في نظام C# (.NET)، توجد عدة مكتبات قوية للعمل مع الرسومات، بدءًا من System.Drawing المدمجة وصولاً إلى الحلول الحديثة متعددة المنصات مثل ImageSharp و SkiaSharp. في هذه المقالة، سنشرح بالتفصيل الأساليب الرئيسية، ونقدم أمثلة كود، ونعطي توصيات عملية.



1. نظرة عامة على مكتبات العمل مع الصور في .NET



يعتمد اختيار المكتبة على مهامك والمنصة. إليك ثلاثة خيارات رئيسية:



  • System.Drawing.Common — مكتبة كلاسيكية من Microsoft، متاحة في .NET 6+. تعمل عبر GDI+ على Windows، ولكن لها قيود على Linux/macOS.
  • SixLabors.ImageSharp — مكتبة مُدارة بالكامل، متعددة المنصات. تدعم تنسيقات JPEG، PNG، BMP، GIF، WebP. مناسبة تمامًا لتطبيقات الويب والمعالجة من جانب الخادم.
  • SkiaSharp — غلاف لمحرك Skia (المستخدم في Chrome، Flutter). يوفر أداءً عاليًا وإمكانيات واسعة للرسومات ثنائية الأبعاد، بما في ذلك العمل مع الصور والنصوص والرسومات المتجهة.


لمعظم المشاريع الحديثة، يُوصى باستخدام ImageSharp — فهو سهل الاستخدام، ويتم تطويره بنشاط، ولا يعتمد على المنصة.



2. تثبيت وتوصيل المكتبات



التثبيت عبر NuGet Package Manager (أو .NET CLI):



// لـ ImageSharpdotnet add package SixLabors.ImageSharp

// لـ SkiaSharpdotnet add package SkiaSharp

// لـ System.Drawing (إذا لزم الأمر)dotnet add package System.Drawing.Common


3. العمليات الأساسية مع الصور باستخدام ImageSharp



سننظر في العمليات الرئيسية: التحميل، تغيير الحجم، القص، تطبيق الفلاتر، والحفظ.



3.1 تحميل الصورة وعرض المعلومات



using SixLabors.ImageSharp;using SixLabors.ImageSharp.PixelFormats;

using (Image<Rgba32> image = Image.Load<Rgba32>("input.jpg")){ Console.WriteLine($"العرض: {image.Width}, الارتفاع: {image.Height}"); Console.WriteLine($"تنسيق البكسل: {image.PixelType}");}


3.2 تغيير الحجم مع الحفاظ على النسب



using SixLabors.ImageSharp.Processing;

using (Image<Rgba32> image = Image.Load<Rgba32>("input.jpg")){ int newWidth = 800; int newHeight = (int)((float)image.Height / image.Width * newWidth);

image.Mutate(x => x.Resize(newWidth, newHeight)); image.Save("output_resized.jpg");}


3.3 قص (crop) الجزء المركزي



using (Image<Rgba32> image = Image.Load<Rgba32>("input.jpg")){    int cropSize = Math.Min(image.Width, image.Height);    var rect = new Rectangle(        (image.Width - cropSize) / 2,        (image.Height - cropSize) / 2,        cropSize,        cropSize    );

image.Mutate(x => x.Crop(rect)); image.Save("output_cropped.jpg");}


3.4 تطبيق الفلاتر (أبيض وأسود، تمويه)



using SixLabors.ImageSharp.Processing;using SixLabors.ImageSharp.Processing.Processors.Transforms;

using (Image<Rgba32> image = Image.Load<Rgba32>("input.jpg")){ // فلتر أبيض وأسود image.Mutate(x => x.Grayscale());

// تمويه غاوسي (نصف القطر 5) image.Mutate(x => x.GaussianBlur(5));

image.Save("output_filtered.jpg");}


4. العمل مع التنسيقات والجودة



يتيح ImageSharp تحديد معلمات الحفظ لكل تنسيق:



using SixLabors.ImageSharp.Formats.Jpeg;

using (Image<Rgba32> image = Image.Load<Rgba32>("input.jpg")){ var encoder = new J

توصيات