विशेषताएँ और कार्यात्मकताएँ

विशेषताएँ और कार्यात्मकताएँ

विशेषताएँ और कार्यक्षमताएँ

यह पृष्ठ 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
GIFFrameCount फ़ाइल में कई फ्रेम होने पर फ्रेमों की संख्या दर्शाता है; यदि गिनती निर्धारित नहीं की जा सकती तो इसे छोड़ दिया जाता है
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
ImageFormatEnum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom

यह भी देखें

 हिन्दी