कैसे काम करें Aspose.Imaging FOSS कोर API के साथ .NET में
Aspose.Imaging FOSS for .NET का सार्वजनिक सतह तीन क्लासों से बनता है: ImageProbe, ImageInfo, और ImageFormat. यह गाइड पैकेज को स्थापित करने और तीनों को एक साथ उपयोग करके फ़ॉर्मेट का पता लगाने और फ़ाइल, स्ट्रीम, तथा बाइट एरे से हेडर मेटाडाटा पढ़ने की प्रक्रिया बताता है।
स्टेप-बाय-स्टेप गाइड
चरण 1: पैकेज स्थापित करें
git clone https://github.com/aspose-imaging-foss/Aspose.Imaging-FOSS-for-.NET.git
cd Aspose.Imaging-FOSS-for-.NET
dotnet buildपैकेज net8.0 और netstandard2.0 को लक्षित करता है और इसमें कोई बाहरी रनटाइम निर्भरताएँ नहीं हैं।
चरण 2: नेमस्पेस आयात करें
एकल using निर्देश जोड़ें — यह ImageProbe, ImageInfo, और ImageFormat, संपूर्ण API सतह को उजागर करता है, इसलिए आयात करने के लिए कुछ भी बाकी नहीं रहता:
using Aspose.Imaging.Foss;चरण 3: पथ द्वारा फ़ाइल का प्रोब करें
ImageProbe.ProbeFile फ़ाइल हेडर को पर्याप्त रूप से पढ़ता है ताकि एक ImageInfo परिणाम भर सके — यह कभी भी पिक्सेल डेटा को डिकोड नहीं करता:
var info = ImageProbe.ProbeFile("photo.jpg");
Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}, {info.BitDepth}-bit");चरण 4: स्ट्रीम या बाइट एरे का प्रोब करें
जब छवि पहले से मेमोरी में हो या किसी स्ट्रीम (एक अपलोड, नेटवर्क प्रतिक्रिया) से आई हो, तो उन पर सीधे स्वीकार करने वाले ओवरलोड का उपयोग करें, बजाय पहले अस्थायी फ़ाइल में लिखने के।
byte[] bytes = File.ReadAllBytes("photo.jpg");
var infoFromBytes = ImageProbe.Probe(bytes);
using var stream = File.OpenRead("photo.jpg");
var infoFromStream = ImageProbe.Probe(stream);Probe(stream) खोज योग्य और गैर-खोज योग्य दोनों स्ट्रीमों के साथ काम करता है।
चरण 5: केवल फ़ॉर्मेट चाहिए होने पर DetectFormat का उपयोग करें
यदि आपको केवल फ़ॉर्मेट के आधार पर शाखा बनानी है और आयाम, बिट डेप्थ, या फ्रेम काउंट की आवश्यकता नहीं है, तो DetectFormat हेडर पार्स के बाकी हिस्से को छोड़ देता है:
var format = ImageProbe.DetectFormat(bytes);
if (format == ImageFormat.Dicom)
{
// route to DICOM-specific handling
}चरण 6: nullable ImageInfo फ़ील्ड्स को सुरक्षित रूप से पढ़ें
Width, Height, BitDepth और FrameCount nullable हैं — ये केवल तब ही भरे जाते हैं जब पता चले फॉर्मेट का हेडर वास्तव में वह मान रखता हो। Format वह एकमात्र फ़ील्ड है जो हेडर पहचाने जाने पर हमेशा सेट हो जाता है:
var info = ImageProbe.ProbeFile("scan.dcm");
if (info.Width.HasValue && info.Height.HasValue)
{
Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}");
}
else
{
Console.WriteLine($"{info.Format}: dimensions not available in this header");
}सामान्य समस्याएँ और समाधान
फ़ॉर्मेट दिखाता है ImageFormat.Unknown. फ़ाइल का हेडर 11 मान्य फ़ॉर्मेट्स (PNG, JPEG, GIF, BMP, WebP, ICO, TIFF, PSD, EMF, WMF, DICOM) में से किसी से मेल नहीं खाता। पुष्टि करें कि फ़ाइल वास्तव में इन फ़ॉर्मेट्स में से एक है — ImageProbe अनमान्य हेडर के लिए कभी त्रुटि नहीं फेंकता, यह रिपोर्ट करता है Unknown इसके बजाय।
Width/Height are null भले ही Format सेट है। हर फ़ॉर्मेट का हेडर सभी फ़ील्ड नहीं रखता, और एक कटे हुए फ़ाइल में फ़ील्ड के बाइट्स से पहले ही कट सकता है। जांचें Format पहले, फिर शेष को वैकल्पिक मानें।
Calling Probe when DetectFormat कर देगा। Probe and ProbeFile पूर्ण हेडर को पार्स करें; DetectFormat केवल फ़ॉर्मेट की पहचान करने के लिए पर्याप्त पढ़ता है। उपयोग करें DetectFormat यदि आप कभी नहीं पढ़ते Width/Height/BitDepth/FrameCount.
डिकोडेड पिक्सेल डेटा की अपेक्षा है। ImageProbe कभी भी इमेज कंटेंट को डिकोड नहीं करता, रेंडर नहीं करता, या परिवर्तित नहीं करता — यह केवल हेडर मेटाडेटा पढ़ता है। डिकोडिंग और पिक्सेल-लेवल ऑपरेशन्स के लिए व्यावसायिक Aspose.Imaging SDK की आवश्यकता होती है।
अक्सर पूछे जाने वाले प्रश्न
यदि मैं किसी कटे हुए या भ्रष्ट फ़ाइल की जाँच करता हूँ तो क्या होता है?
ImageProbe कभी भी विकृत या कटे हुए इनपुट पर अपवाद नहीं फेंकता। यह एक आंशिक ImageInfo लौटाता है — Format तब सेट किया जाता है जब भी हेडर का फॉर्मेट मार्कर पहचाना जाता है, भले ही फ़ाइल का बाकी हिस्सा छोटा कर दिया गया हो।
क्या ImageProbe थ्रेड-सुरक्षित है?
हाँ। ImageProbe स्थिर है और कॉल्स के बीच कोई परिवर्तनीय स्थिति नहीं रखता, इसलिए कई थ्रेड्स से एक साथ किए गए कॉल सुरक्षित हैं।
क्या मैं किसी वास्तविक फ़ाइल की जाँच किए बिना सीधे एक ImageInfo बना सकता हूँ?
हाँ। ImageInfo का कंस्ट्रक्टर सार्वजनिक है और केवल format आवश्यक है — परीक्षण डबल बनाने के लिए उपयोगी: new ImageInfo(ImageFormat.Png, width: 64, height: 48)।
क्या मुझे कुछ भी डिस्पोज़ करने की आवश्यकता है?
No. ImageProbe अपने पास कोई IDisposable संसाधन नहीं रखता। यदि आप एक Stream पास करते हैं जो आपने स्वयं खोला है, तो आप इसे निपटाने के लिए उत्तरदायी रहते हैं।