العمل مع الصور في C# (.NET): المكتبات والأدوات والأمثلة

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

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

ابدأ الدورة

العمل مع الصور في C# (.NET): نظرة عامة على المكتبات وأمثلة عملية

معالجة الصور هي إحدى المهام الشائعة في التطبيقات الحديثة بلغة C# (.NET). سواء كان تحميل صورة المستخدم، إنشاء صور مصغرة، إضافة علامات مائية، أو تحويل التنسيقات - يقدم .NET العديد من الحلول القوية. في هذه المقالة، سنستعرض المكتبات الرئيسية، إمكانياتها، ونكتب أمثلة حقيقية للكود.



1. المكتبة القياسية: System.Drawing.Common

تاريخياً، أول وأشهر مكتبة هي System.Drawing.Common. توفر الوصول إلى GDI+ (واجهة جهاز الرسوميات) في Windows. ومع ذلك، لديها قيود مهمة:

  • تعمل فقط على Windows (لـ .NET Core/.NET 5+ يتطلب حزمة System.Drawing.Common، لكن الدعم على Linux/macOS محدود).
  • غير محسّنة لخدمات الويب عالية التحميل (تسرب الذاكرة عند الاستخدام غير الصحيح).
  • لا تدعم التنسيقات الحديثة (WebP, AVIF) بشكل افتراضي.

مثال على تحميل وتغيير حجم الصورة:

using System.Drawing;using System.Drawing.Imaging;

public static void ResizeImage(string sourcePath, string destPath, int newWidth, int newHeight){ using (var image = Image.FromFile(sourcePath)) using (var resized = new Bitmap(newWidth, newHeight)) using (var graphics = Graphics.FromImage(resized)) { graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; graphics.DrawImage(image, 0, 0, newWidth, newHeight); resized.Save(destPath, ImageFormat.Jpeg); }}

هذا الكود يقوم بتحميل الصورة الأصلية، إنشاء Bitmap جديد بالأبعاد المحددة، ورسم الصورة الأصلية عليه بجودة عالية. مناسب للمهام البسيطة.



2. المكتبة الحديثة متعددة المنصات: ImageSharp (SixLabors)

ImageSharp هي مكتبة مُدارة بالكامل لـ .NET، لا تعتمد على GDI+. تعمل على Windows و Linux و macOS. المزايا الرئيسية:

  • كود C# نقي، بدون تبعيات أصلية.
  • دعم WebP, PNG, JPEG, BMP, GIF, TIFF.
  • فلاتر مدمجة، تدوير، قص، تغيير حجم.
  • أداء عالٍ وأمان لتطبيقات الويب.

التثبيت: dotnet add package SixLabors.ImageSharp

مثال على تغيير الحجم والحفظ بتنسيق WebP:

using SixLabors.ImageSharp;using SixLabors.ImageSharp.Processing;using SixLabors.ImageSharp.Formats.Webp;

public static void ResizeToWebp(string input, string output, int width, int height){ using (var image = Image.Load(input)) { image.Mutate(x => x.Resize(width, height)); var encoder = new WebpEncoder { Quality = 80 }; image.Save(output, encoder); }}

لاحظ: طريقة Mutate تطبق التغييرات على الصورة نفسها (بدون إنشاء نسخة)، مما يوفر الذاكرة.



3. محرك الرسوميات: SkiaSharp

SkiaSharp هو غلاف لمكتبة Skia (المستخدمة في Chrome, Android, Flutter). يوفر أقصى مرونة وأداء، خاصة للرسوميات ثنائية الأبعاد المعقدة.

  • متعدد المنصات (Windows, Linux, macOS, المنصات المحمولة).
  • دعم التسريع العتادي (GPU).
  • مجموعة غنية من الأدوات: المسارات، الفرش، التظليل، الأقنعة.

مثال على إضافة علامة مائية:

using SkiaSharp;

public static void AddWatermark(string imagePath, string watermarkText, string outputPath){ using (var input = SKBitmap.Decode(imagePath)) using (var canvas = new SKCanvas(input)) using (var paint = new SKPaint { Color = SKColors.White.WithAlpha(128), TextSize =

توصيات