विशेषताएँ और कार्यात्मकताएँ
विशेषताएँ और कार्यक्षमताएँ
यह पृष्ठ Aspose.Imaging FOSS के .NET के फ़ॉर्मेट-डिटेक्शन और हेडर-प्रोबिंग API के प्रत्येक फीचर क्षेत्र को कवर करता है, साथ ही कार्यशील C# उदाहरण प्रदान करता है। लाइब्रेरी कभी भी पिक्सेल डेटा को डिकोड नहीं करती — प्रत्येक मेथड केवल फ़ाइल हेडर को पढ़ता है।
फ़ॉर्मेट पहचान
ImageProbe स्थिर एंट्री पॉइंट है। तीन ओवरलोड फ़ाइल पाथ, स्ट्रीम, और रॉ बाइट एरे को कवर करते हैं:
using Aspose.Imaging.Foss;
var fromPath = ImageProbe.ProbeFile("photo.jpg");
var fromBytes = ImageProbe.Probe(byteArray);
var fromStream = ImageProbe.Probe(stream);
var formatOnly = ImageProbe.DetectFormat(byteArray); // ImageFormat only, no header parseजब आपको केवल फ़ॉर्मेट के आधार पर शाखा बनानी हो तो DetectFormat का उपयोग करें; जब आपको आयाम, बिट डेप्थ या फ्रेम गिनती जैसी अतिरिक्त जानकारी चाहिए तो Probe/ProbeFile का उपयोग करें।
हेडर मेटाडेटा पढ़ना
ProbeFile/Probe एक ImageInfo लौटाते हैं जिसमें nullable Width, Height, BitDepth, और FrameCount होते हैं — ये केवल तभी भरते हैं जब पहचाने गये फ़ॉर्मेट के हेडर में वास्तव में वह मान मौजूद हो:
var info = ImageProbe.ProbeFile("scan.dcm");
if (info.Width.HasValue && info.Height.HasValue)
{
Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}");
}Format (एक ImageFormat enum मान) हमेशा हेडर की पहचान होने पर सेट हो जाता है — यह वह एकमात्र फ़ील्ड है जो भरने की गारंटी देता है।
फ़ॉर्मेट-विशिष्ट नोट्स
कुछ फ़ॉर्मेट्स में हेडर की अजीबियाँ होती हैं जो ImageInfo सामान्यीकृत करता है या सीधे उजागर करता है:
| फ़ॉर्मेट | Behavior |
|---|---|
| GIF | FrameCount फ़ाइल में कई फ्रेम होने पर फ्रेमों की संख्या दर्शाता है; यदि गिनती निर्धारित नहीं की जा सकती तो इसे छोड़ दिया जाता है |
| BMP | हेडर में नकारात्मक ऊँचाई (ऊपर-से-नीचे पंक्ति क्रम) को सामान्यीकृत किया जाता है — Height सकारात्मक मान लौटाता है |
| DICOM | हेडर पार्सिंग Implicit VR Little Endian तथा Explicit VR Little/Big Endian ट्रांसफ़र सिंटैक्स को संभालती है, पंक्तियों, स्तंभों और आवंटित बिट्स को निकालती है |
// DICOM: rows -> Height, columns -> Width, bitsAllocated -> BitDepth,
// across any of the three common transfer syntaxes
var dicomInfo = ImageProbe.Probe(dicomBytes);
Console.WriteLine($"{dicomInfo.Width}x{dicomInfo.Height}, {dicomInfo.BitDepth}-bit");समर्थित फ़ॉर्मेट्स
सभी 11 फ़ॉर्मेट्स का पता एक ही तरीके से लगाया जाता है — ImageProbe फ़ॉर्मेट की पहचान करता है और हेडर मेटाडेटा पढ़ता है; यह किसी भी फ़ॉर्मेट के लिए पिक्सेल डेटा को डिकोड या पुनः-एन्कोड नहीं करता। फ़ील्ड का मान वास्तव में फ़ॉर्मेट के अनुसार बदलता है — प्रत्येक फ़ॉर्मेट Format सेट करता है, लेकिन केवल कुछ ही अपने हेडर में बिट गहराई या फ्रेम गिनती रखते हैं:
| फ़ॉर्मेट | चौड़ाई / ऊँचाई | बिट गहराई | फ़्रेम गिनती |
|---|---|---|---|
| PNG | ✓ | ✓ | ✓ |
| JPEG | ✓ | ✓ | — |
| GIF | ✓ | — | ✓ |
| BMP | ✓ | ✓ | — |
| WebP | ✓ | — | — |
| ICO | ✓ | ✓ | ✓ |
| TIFF | ✓ | ✓ | ✓ |
| PSD | ✓ | ✓ | — |
| EMF | ✓ (सीमाओं से) | — | — |
| WMF (स्थापनीय) | ✓ (96 DPI मानता है) | — | — |
| DICOM | ✓ (पंक्तियाँ/स्तम्भ) | ✓ (BitsAllocated) | — |
एक अपरिचित हेडर ImageFormat.Unknown में हल हो जाता है न कि अपवाद फेंके। कुछ उल्लेखनीय फ़ील्ड-पॉपुलेशन विवरण: PNG का FrameCount हमेशा 1 रहता है (एक स्थिर मान, वास्तविक एनिमेटेड-PNG फ्रेम पहचान नहीं); ICO का FrameCount डायरेक्टरी में सम्मिलित आइकन आकारों की वास्तविक गिनती है, और ICO डायरेक्टरी एंट्री में 0 आयाम बाइट का अर्थ है फ़ॉर्मेट स्पेस में 256px; TIFF का FrameCount फ़ाइल की IFD श्रृंखला के सीमित ट्रैवर्सल को दर्शाता है (प्रत्येक IFD एक पेज है); गैर-प्लेसेबल WMF अभी भी सही ढंग से ImageFormat.Wmf के रूप में पहचाना जाता है लेकिन केवल Format लौटाता है — आयाम केवल प्लेसेबल WMF के लिए भरते हैं, हेडर की इकाइयों-प्रति-इंच सीमाओं से हार्डकोडेड 96DPI रूपांतरण द्वारा; EMF में कोई स्पष्ट चौड़ाई/ऊँचाई फ़ील्ड नहीं है, इसलिए इसके आयाम rclBounds डिवाइस-स्पेस आयत से निकाले जाते हैं।
डिज़ाइन द्वारा लचीला
ImageProbe विकृत या काटे गए इनपुट पर कभी अपवाद नहीं फेंकता। अपवाद उठाने के बजाय, यह एक आंशिक ImageInfo लौटाता है — Format तब सेट होता है जब हेडर के फ़ॉर्मेट मार्कर की पहचान हो जाती है, चाहे फ़ाइल का बाकी हिस्सा छोटा या भ्रष्ट ही क्यों न हो:
byte[] truncated = fullFileBytes[..^3];
var info = ImageProbe.Probe(truncated);
// info.Format is still populated; other fields may be nullयह अनविश्वासनीय, आंशिक, या चल रहे डाउनलोड पर बिना प्रत्येक कॉल के चारों ओर try/catch के उपयोग के सुरक्षित रूप से चलाने की अनुमति देता है।
सलाह और सर्वोत्तम प्रथाएँ
- जब आपको केवल फ़ॉर्मेट चाहिए, आयाम नहीं, तो
DetectFormatका उपयोगProbeके बजाय करें। - उन्हें उपयोग करने से पहले
Width/Height/BitDepth/FrameCountमेंnullकी जाँच करें — ये हर फ़ॉर्मेट के लिए भरें नहीं होते। - बड़ी फ़ाइलों के साथ काम करते समय पहले पूरी फ़ाइल को बाइट ऐरे में पढ़ने के बजाय
Probe(stream)को प्राथमिकता दें। ImageProbeपूरी तरह स्थिर है — कोई इंस्टेंस नहीं, कोईIDisposableनहीं, कोई कॉन्फ़िगरेशन ऑब्जेक्ट नहीं।
सामान्य समस्याएँ
| समस्या | कारण | समाधान |
|---|---|---|
Format है ImageFormat.Unknown | हेडर 11 मान्य स्वरूपों में से किसी से मेल नहीं खाता है | पुष्टि करें कि फ़ाइल PNG, JPEG, GIF, BMP, WebP, ICO, TIFF, PSD, EMF, WMF, या DICOM में से किसी एक है |
Width/Height हैं null | फ़ॉर्मेट का हेडर वह फ़ील्ड नहीं रखता, या हेडर उस फ़ील्ड से पहले ही कट गया था | पहले Format जाँचें; हर फ़ॉर्मेट में सभी फ़ील्ड भर नहीं होते |
| BMP की ऊँचाई अप्रत्याशित रूप से सकारात्मक दिखती है | स्रोत फ़ाइल ने हेडर में नकारात्मक (ऊपर-से-नीचे) ऊँचाई का प्रयोग किया | अपेक्षित — ImageInfo.Height हमेशा सकारात्मक परिमाण में समान्यीकृत होता है |
FAQ
क्या ImageProbe पिक्सेल डेटा को डिकोड करता है?
नहीं। प्रत्येक विधि केवल फ़ाइल हेडर पढ़ती है — आयाम, बिट डेप्थ, और फ्रेम गिनती — पिक्सेल सामग्री कभी नहीं पढ़ती। डिकोडिंग और रेंडरिंग इस लाइब्रेरी के दायरे से बाहर हैं।
यदि मैं किसी भ्रष्ट या अधूरी फ़ाइल को प्रोब करता हूँ तो क्या होता है?
ImageProbe गलत स्वरूप या अधूरी इनपुट के लिए कभी त्रुटि नहीं फेंकता। यह एक ImageInfo लौटाता है जिसमें उपलब्ध हेडर बाइट्स से निर्धारित किए जा सकने वाले सभी फ़ील्ड होते हैं — Format तब सेट किया जाता है जब फ़ॉर्मेट मार्कर स्वयं पहचाना गया हो।
क्या मैं ऐसी स्ट्रीम को प्रोब कर सकता हूँ जो seekable न हो?
हाँ। Probe(stream) दोनों, seekable और non-seekable स्ट्रीम को स्वीकार करता है।
API Reference सारांश
| क्लास / मेथड | विवरण |
|---|---|
ImageProbe.ProbeFile(path) | पथ द्वारा फ़ाइल को प्रोब करें, जो एक ImageInfo लौटाता है |
ImageProbe.Probe(stream) | Stream को प्रोब करें (सीक करने योग्य या नहीं) |
ImageProbe.Probe(data) | कच्चे byte[] को प्रोब करें |
ImageProbe.DetectFormat(stream) | स्ट्रीम के लिए केवल ImageFormat लौटाएँ |
ImageProbe.DetectFormat(data) | byte[] के लिए केवल ImageFormat लौटाएँ |
ImageInfo | परिणाम प्रकार: Format, Width, Height, BitDepth, FrameCount |
ImageFormat | Enum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom |