العمل مع الصور في C# (.NET): نظرة عامة على المكتبات وأمثلة عملية
معالجة الصور هي إحدى المهام الأساسية عند إنشاء تطبيقات الويب الحديثة والبرامج المكتبية والخدمات المحمولة. في نظام C# (.NET)، توجد عدة مكتبات قوية تتيح تحميل الصور وتحريرها وتحليلها وحفظها. في هذه المقالة، سنستعرض الأساليب الرئيسية: من المكتبة الكلاسيكية System.Drawing إلى الحلول الحديثة متعددة المنصات ImageSharp و SkiaSharp.
1. System.Drawing.Common — كلاسيكيات .NET
مكتبة System.Drawing.Common متاحة في .NET Core/.NET 5+ كحزمة NuGet. توفر واجهة برمجة تطبيقات مألوفة للعمل مع الصور النقطية (BMP، JPEG، PNG، GIF، TIFF).
هام: على Linux و macOS تتطلب تثبيت مكتبة libgdiplus.
التثبيت
dotnet add package System.Drawing.Commonمثال: التحميل، تغيير الحجم، والحفظ
using System.Drawing;using System.Drawing.Drawing2D;using System.Drawing.Imaging;
public class ImageProcessor{ public void ResizeImage(string inputPath, string outputPath, int maxWidth, int maxHeight) { using var original = Image.FromFile(inputPath); var ratio = Math.Min((double)maxWidth / original.Width, (double)maxHeight / original.Height); int newWidth = (int)(original.Width * ratio); int newHeight = (int)(original.Height * ratio);
using var bitmap = new Bitmap(newWidth, newHeight); using var graphics = Graphics.FromImage(bitmap); graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; graphics.DrawImage(original, 0, 0, newWidth, newHeight);
bitmap.Save(outputPath, ImageFormat.Jpeg); }}2. ImageSharp (SixLabors) — مكتبة حديثة متعددة المنصات
SixLabors.ImageSharp هي مكتبة مُدارة بالكامل بدون تبعيات للمكونات الأصلية. مثالية لتطبيقات الخادم وخدمات الويب والوظائف السحابية. تدعم التنسيقات المتقدمة (WebP، HEIF، AVIF) والمعالجة المتطورة.
التثبيت
dotnet add package SixLabors.ImageSharpمثال: إضافة علامة مائية
using SixLabors.ImageSharp;using SixLabors.ImageSharp.Drawing.Processing;using SixLabors.ImageSharp.Processing;using SixLabors.Fonts;
public async Task AddWatermarkAsync(string inputPath, string outputPath, string watermarkText){ using var image = await Image.LoadAsync(inputPath); var font = SystemFonts.CreateFont("Arial", 48, FontStyle.Bold);
image.Mutate(ctx => { ctx.DrawText(watermarkText, font, Color.White, new PointF(50, 50)); });
await image.SaveAsync(outputPath);}3. SkiaSharp — محرك الرسوم من Google
SkiaSharp هو غلاف لمكتبة Skia (المستخدمة في Chrome، Flutter، Android). يوفر أداءً عاليًا، ووصولاً منخفض المستوى إلى البكسلات، ودعمًا للتحويلات المتجهة المعقدة.
التثبيت
dotnet add package SkiaSharpمثال: تطبيق فلتر التمويه (Blur)
using SkiaSharp;
public void ApplyBlur(string inputPath, string outputPath, float sigma){ using var inputStream = File.OpenRead(inputPath); using var original = SKBitmap.Decode(inputStream); using var surface = new SKCanvas(original);
var paint = new SKPaint { ImageFilter = SKImageFilter.CreateBlur(sigma, sigma) }; surface.DrawBitmap(original, 0, 0, paint);
using var image = SKImage.FromBitmap(original); using var data = image.Encode(SKEncodedImageFormat.Jpeg, 90); using var outputStream = File.OpenWrite(outputPath); data.SaveTo(outputStream);\