C# (.NET) में इमेज के साथ काम करना: बुनियादी से लेकर उन्नत तकनीकों तक
इमेज प्रोसेसिंग आधुनिक डेवलपमेंट में एक प्रमुख कार्य है। C# (.NET) इकोसिस्टम में ग्राफिक्स के साथ काम करने के लिए कई शक्तिशाली लाइब्रेरीज़ मौजूद हैं, जिनमें बिल्ट-इन System.Drawing से लेकर ImageSharp और SkiaSharp जैसे आधुनिक क्रॉस-प्लेटफ़ॉर्म समाधान शामिल हैं। इस लेख में हम मुख्य दृष्टिकोणों पर विस्तार से चर्चा करेंगे, कोड उदाहरण देंगे और व्यावहारिक सुझाव देंगे।
1. .NET में इमेज के साथ काम करने के लिए लाइब्रेरीज़ का अवलोकन
लाइब्रेरी का चुनाव आपके कार्यों और प्लेटफ़ॉर्म पर निर्भर करता है। यहाँ तीन मुख्य विकल्प हैं:
- System.Drawing.Common — Microsoft की क्लासिक लाइब्रेरी, .NET 6+ में उपलब्ध। Windows पर GDI+ के माध्यम से काम करती है, लेकिन Linux/macOS पर सीमाएँ हैं।
- SixLabors.ImageSharp — पूरी तरह से प्रबंधित, क्रॉस-प्लेटफ़ॉर्म लाइब्रेरी। JPEG, PNG, BMP, GIF, WebP फ़ॉर्मेट को सपोर्ट करती है। वेब एप्लिकेशन और सर्वर-साइड प्रोसेसिंग के लिए बढ़िया है।
- SkiaSharp — Skia इंजन (Chrome, Flutter में उपयोग) पर एक रैपर। उच्च प्रदर्शन और 2D ग्राफिक्स के लिए व्यापक क्षमताएँ प्रदान करता है, जिसमें इमेज, टेक्स्ट और वेक्टर ग्राफिक्स के साथ काम करना शामिल है।
अधिकांश आधुनिक प्रोजेक्ट्स के लिए ImageSharp अनुशंसित है — यह उपयोग में आसान, सक्रिय रूप से विकसित और प्लेटफ़ॉर्म-स्वतंत्र है।
2. लाइब्रेरीज़ की स्थापना और कनेक्शन
NuGet Package Manager (या .NET CLI) के माध्यम से स्थापना:
// ImageSharp के लिएdotnet add package SixLabors.ImageSharp
// SkiaSharp के लिएdotnet add package SkiaSharp
// System.Drawing के लिए (यदि आवश्यक हो)dotnet add package System.Drawing.Common3. 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 मध्य भाग को क्रॉप करना
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