ImageSharp C# (.NET): पूर्ण गाइड उदाहरणों के साथ
1. यह क्या है और क्यों ज़रूरी है?
ImageSharp एक शक्तिशाली, पूरी तरह से प्रबंधित, क्रॉस-प्लेटफ़ॉर्म इमेज प्रोसेसिंग लाइब्रेरी है, जो C# में .NET इकोसिस्टम के लिए लिखी गई है। यह SixLabors लाइब्रेरी परिवार का हिस्सा है और डेवलपर्स को बिना किसी बाहरी नेटिव डिपेंडेंसी (जैसे ImageMagick, SkiaSharp या GDI+) के इमेज के साथ काम करने के लिए एक साफ, सुरक्षित और उच्च-प्रदर्शन वाला API प्रदान करती है। इसका मतलब है कि ImageSharp Windows, Linux और macOS पर समान रूप से अच्छा काम करती है, जो इसे वेब एप्लिकेशन (ASP.NET Core), माइक्रोसर्विसेज, कंसोल यूटिलिटीज और मोबाइल एप्लिकेशन (Xamarin/MAUI के माध्यम से) के लिए एक आदर्श विकल्प बनाती है।
ImageSharp क्यों ज़रूरी है? आधुनिक डेवलपमेंट में, इमेज प्रोसेसिंग की ज़रूरत हर जगह होती है: गैलरी के लिए थंबनेल बनाने, यूज़र के अवतार का साइज़ बदलने, वॉटरमार्क लगाने, फ़िल्टर लगाने और फ़ॉर्मेट बदलने तक। ImageSharp यह सब "बॉक्स से बाहर" प्रदर्शन और सुरक्षा पर ध्यान देने के साथ प्रदान करता है। पुराने System.Drawing के विपरीत, जो Windows से बंधा है और थ्रेडिंग में समस्या पैदा करता है, ImageSharp थ्रेड-सेफ और पूरी तरह से क्रॉस-प्लेटफ़ॉर्म है। इसे समुदाय द्वारा सक्रिय रूप से समर्थित किया जाता है और इसकी विस्तृत डॉक्यूमेंटेशन है।
लाइब्रेरी की प्रमुख क्षमताओं में शामिल हैं: लोकप्रिय फ़ॉर्मेट (JPEG, PNG, BMP, GIF, WebP, TIFF) में इमेज लोड और सेव करना, साइज़ बदलना, क्रॉप करना, घुमाना, फ्लिप करना, टेक्स्ट और शेप लगाना, कलर मैट्रिक्स लगाना, फ़िल्टर (ब्लर, शार्पन, सेपिया, ब्लैक-एंड-व्हाइट), EXIF डेटा के साथ काम करना, GIF एनिमेशन और बहुत कुछ। ImageSharp Image की अवधारणा पर बनी है जो पिक्सल डेटा के लिए एक कंटेनर है और एक्सटेंशन मेथड के माध्यम से एक लचीला API प्रदान करती है।
2. इंस्टॉलेशन
.NET प्रोजेक्ट में ImageSharp इंस्टॉल करना NuGet पैकेज मैनेजर के माध्यम से किया जाता है। टर्मिनल या पैकेज मैनेजर कंसोल में निम्नलिखित कमांड में से एक चलाएँ:
// .NET CLI के माध्यम से (अनुशंसित)
dotnet add package SixLabors.ImageSharp
// Package Manager Console के माध्यम से
Install-Package SixLabors.ImageSharp
// Visual Studio/Rider में NuGet Package Manager के माध्यम से
// "SixLabors.ImageSharp" खोजें और नवीनतम स्थिर संस्करण इंस्टॉल करें
इंस्टॉलेशन के बाद, अपनी फ़ाइल की शुरुआत में using डायरेक्टिव जोड़ें:
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Formats.Jpeg;
using SixLabors.ImageSharp.PixelFormats;
3. बुनियादी उपयोग: इमेज लोड और सेव करना
सबसे बुनियादी ऑपरेशन है किसी फ़ाइल से इमेज लोड करना, उसमें कुछ बदलाव करना और फिर उसे सेव करना। यहाँ एक सरल उदाहरण है:
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Processing;
// इमेज लोड करें
using (Image image = Image.Load("input.jpg"))
{
// इमेज को ग्रेस्केल में बदलें
image.Mutate(x => x.Grayscale());
// इमेज को सेव करें
image.Save("output.jpg");
}
Console.WriteLine("इमेज सफलतापूर्वक प्रोसेस हो गई!");
इस कोड में, Image.Load() मेथड फ़ाइल पथ से इमेज लोड करता है। Mutate() मेथड इमेज पर इन-प्लेस ऑपरेशन करने की अनुमति देता है। Grayscale() एक एक्सटेंशन मेथड है जो इमेज को ग्रेस्केल में बदल देता है। अंत में, Save() मेथड इमेज को डिस्क पर सेव करता है।
Image ऑब्जेक्ट IDisposable को इम्प्लीमेंट करता है, इसलिए इसे हमेशा using स्टेटमेंट में लपेटें ताकि रिसोर्स सही तरीके से रिलीज़ हों।
4. मुख्य मेथड और उनके उदाहरण
ImageSharp कई शक्तिशाली मेथड प्रदान करता है। नीचे कुछ सबसे ज़रूरी मेथड दिए गए हैं:
4.1. Resize (साइज़ बदलना)
इमेज का साइज़ बदलने के लिए Resize() मेथड का उपयोग करें। यह कई ओवरलोड प्रदान करता है, जिसमें आप चौड़ाई, ऊँचाई और रीसैंपलिंग मोड सेट कर सकते हैं।
using (Image image = Image.Load("input.jpg"))
{
// 300x200 पिक्सल में रिसाइज़ करें
image.Mutate(x => x.Resize(300, 200));
image.Save("resized.jpg");
}
आप ResizeOptions क्लास का उपयोग करके और अधिक कंट्रोल प्राप्त कर सकते हैं, जैसे कि आस्पेक्ट रेशियो बनाए रखना या क्रॉप करना:
using (Image image = Image.Load("input.jpg"))
{
image.Mutate(x => x.Resize(new ResizeOptions
{
Size = new Size(300, 200),
Mode = ResizeMode.Max // आस्पेक्ट रेशियो बनाए रखें
}));
image.Save("resized_max.jpg");
}
4.2. Crop (क्रॉप करना)
इमेज के एक विशिष्ट हिस्से को काटने के लिए Crop() मेथड का उपयोग करें।
using (Image image = Image.Load("input.jpg"))
{
// बाएँ से 50, ऊपर से 50, 200 चौड़ाई, 150 ऊँचाई का आयत क्रॉप करें
Rectangle cropArea = new Rectangle(50, 50, 200, 150);
image.Mutate(x => x.Crop(cropArea));
image.Save("cropped.jpg");
}
4.3. Rotate और Flip (घुमाना और पलटना)
इमेज को घुमाने या पलटने के लिए Rotate() और Flip() मेथड का उपयोग करें।
using (Image image = Image.Load("input.jpg"))
{
// 90 डिग्री घुमाएँ
image.Mutate(x => x.Rotate(90));
image.Save("rotated.jpg");
// क्षैतिज रूप से पलटें
image.Mutate(x => x.Flip(FlipMode.Horizontal));
image.Save("flipped.jpg");
}
4.4. Text और Shape जोड़ना
इमेज पर टेक्स्ट या शेप जोड़ने के लिए DrawText() और DrawPolygon() जैसे मेथड का उपयोग करें।
using SixLabors.Fonts;
using SixLabors.ImageSharp.Drawing.Processing;
using (Image image = Image.Load("input.jpg"))
{
// टेक्स्ट जोड़ें
Font font = SystemFonts.CreateFont("Arial", 48);
image.Mutate(x => x.DrawText("Hello, ImageSharp!", font, Color.White, new PointF(50, 50)));
// एक आयत बनाएँ
image.Mutate(x => x.DrawPolygon(Color.Red, 5, new PointF(100, 100), new PointF(200, 100), new PointF(200, 200), new PointF(100, 200)));
image.Save("with_text_and_shape.jpg");
}
4.5. फ़िल्टर लगाना
ImageSharp कई फ़िल्टर प्रदान करता है, जैसे ब्लर, शार्पन, सेपिया, ब्राइटनेस, कंट्रास्ट आदि।
using (Image image = Image.Load("input.jpg"))
{
// ब्लर फ़िल्टर
image.Mutate(x => x.GaussianBlur(5));
image.Save("blurred.jpg");
// सेपिया फ़िल्टर
image.Mutate(x => x.Sepia());
image.Save("sepia.jpg");
// ब्राइटनेस और कंट्रास्ट
image.Mutate(x => x.Brightness(0.5f).Contrast(1.5f));
image.Save("adjusted.jpg");
}
5. उन्नत उपयोग
5.1. मेमोरी स्ट्रीम के साथ काम करना
अक्सर आपको फ़ाइल के बजाय मेमोरी स्ट्रीम से इमेज लोड या सेव करने की ज़रूरत होती है, खासकर वेब एप्लिकेशन में।
using (var memoryStream = new MemoryStream())
{
// इमेज को मेमोरी स्ट्रीम में सेव करें
using (Image image = Image.Load("input.jpg"))
{
image.SaveAsJpeg(memoryStream);
}
// मेमोरी स्ट्रीम से इमेज लोड करें
memoryStream.Position = 0;
using (Image loadedImage = Image.Load(memoryStream))
{
// आगे प्रोसेसिंग
}
}
5.2. इमेज कंप्रेशन और क्वालिटी कंट्रोल
JPEG फ़ॉर्मेट में सेव करते समय, आप क्वालिटी को कंट्रोल कर सकते हैं:
using (Image image = Image.Load("input.jpg"))
{
var encoder = new JpegEncoder
{
Quality = 75 // 1 से 100 के बीच, जहाँ 100 सबसे अच्छी क्वालिटी है
};
image.Save("compressed.jpg", encoder);
}
5.3. एक साथ कई ऑपरेशन
आप Mutate() के अंदर कई ऑपरेशन चेन कर सकते हैं:
using (Image image = Image.Load("input.jpg"))
{
image.Mutate(x => x
.Resize(800, 600)
.Grayscale()
.Rotate(45)
.DrawText("Processed", SystemFonts.CreateFont("Arial", 24), Color.White, new PointF(10, 10))
);
image.Save("final.jpg");
}
6. सामान्य समस्याएँ और समाधान
समाधान: सुनिश्चित करें कि आपने सही फ़ॉर्मेट सपोर्ट इंस्टॉल किया है। ImageSharp कोर पैकेज JPEG, PNG, BMP, GIF को सपोर्ट करता है। WebP और TIFF के लिए अलग पैकेज हैं:
SixLabors.ImageSharp.WebP और SixLabors.ImageSharp.Tiff।
समाधान: ImageSharp बड़ी इमेज को हैंडल करने के लिए ऑप्टिमाइज़्ड है, लेकिन बहुत बड़ी इमेज के लिए, आप
Configuration.Default में मेमोरी लिमिट सेट कर सकते हैं या स्ट्रीमिंग API का उपयोग कर सकते हैं।
7. निष्कर्ष
ImageSharp एक आधुनिक, शक्तिशाली और क्रॉस-प्लेटफ़ॉर्म इमेज प्रोसेसिंग लाइब्रेरी है जो .NET डेवलपर्स के लिए एक बेहतरीन विकल्प है। इस गाइड में हमने इंस्टॉलेशन, बुनियादी मेथड और उन्नत उपयोग को कवर किया है। चाहे आप एक वेब एप्लिकेशन बना रहे हों, एक मोबाइल ऐप, या एक कंस