Χαρακτηριστικά και Λειτουργίες
Χαρακτηριστικά και Λειτουργίες
Αυτή η σελίδα καλύπτει κάθε περιοχή λειτουργίας του Aspose.Imaging FOSS για την ανίχνευση μορφής του .NET και την έλεγχο κεφαλίδας API, με λειτουργικά παραδείγματα C#. Η βιβλιοθήκη δεν αποκωδικοποιεί ποτέ δεδομένα pixel — κάθε μέθοδος διαβάζει μόνο την κεφαλίδα του αρχείου.
Ανίχνευση Μορφής
ImageProbe είναι το στατικό σημείο εισόδου. Τρεις υπερφορτώσεις καλύπτουν μια διαδρομή αρχείου, ένα ρεύμα και έναν ακατέργαστο πίνακα byte:
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 όταν χρειάζεστε επίσης διαστάσεις, βάθος bit ή αριθμό καρέ.
Ανάγνωση Μεταδεδομένων Κεφαλίδας
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 (μια τιμή enum ImageFormat) ορίζεται πάντα μόλις αναγνωριστεί η κεφαλίδα — είναι το μοναδικό πεδίο που εγγυάται ότι θα είναι γεμάτο.
Σημειώσεις ανά μορφή
Μερικές μορφές έχουν ιδιαιτερότητες στην κεφαλίδα που το ImageInfo ομαλοποιεί ή εκθέτει απευθείας:
| Μορφή | Behavior |
|---|---|
| GIF | FrameCount αντικατοπτρίζει τον αριθμό των καρέ όταν το αρχείο περιέχει πολλαπλά καρέ; παραλείπεται εάν ο αριθμός δεν μπορεί να προσδιοριστεί |
| BMP | Ένα αρνητικό ύψος στην κεφαλίδα (διάταξη γραμμών από πάνω προς τα κάτω) κανονικοποιείται — Height επιστρέφει το θετικό μέγεθος |
| DICOM | Η ανάλυση της κεφαλίδας υποστηρίζει τις συντακτικές μεταφορές Implicit VR Little Endian και Explicit VR Little/Big Endian, εξάγοντας γραμμές, στήλες και τα bits allocated |
// 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, αλλά μόνο κάποιες περιέχουν βάθος bit ή αριθμό πλαισίων στην κεφαλίδα τους:
| Μορφή | Πλάτος / Ύψος | Βάθος bit | Αριθμός καρέ |
|---|---|---|---|
| PNG | ✓ | ✓ | ✓ |
| JPEG | ✓ | ✓ | — |
| GIF | ✓ | — | ✓ |
| BMP | ✓ | ✓ | — |
| WebP | ✓ | — | — |
| ICO | ✓ | ✓ | ✓ |
| TIFF | ✓ | ✓ | ✓ |
| PSD | ✓ | ✓ | — |
| EMF | ✓ (από τα όρια) | — | — |
| WMF (με δυνατότητα τοποθέτησης) | ✓ (υποθέτει 96 DPI) | — | — |
| DICOM | ✓ (Γραμμές/Στήλες) | ✓ (BitsAllocated) | — |
Μια μη αναγνωρισμένη κεφαλίδα επιλύεται σε ImageFormat.Unknown αντί για εξαίρεση. Μερικές αξιοσημείωτες λεπτομέρειες συμπλήρωσης πεδίων: το FrameCount του PNG είναι πάντα 1 (μια σταθερά, όχι πραγματική ανίχνευση πλαισίων animated-PNG); το FrameCount του ICO είναι ένας αληθινός αριθμός των ενσωματωμένων μεγεθών εικονιδίων στον κατάλογο, και ένα byte διάστασης 0 σε μια καταχώρηση καταλόγου ICO σημαίνει 256px σύμφωνα με το πρότυπο μορφής· το FrameCount του TIFF αντικατοπτρίζει μια περιορισμένη πορεία της αλυσίδας IFD του αρχείου (κάθε IFD είναι μια σελίδα); το μη-placeable WMF εξακολουθεί να αναγνωρίζεται σωστά ως ImageFormat.Wmf αλλά επιστρέφει μόνο Format — οι διαστάσεις συμπληρώνονται μόνο για placeable 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)αντί για το να διαβάζετε ολόκληρο το αρχείο σε έναν πίνακα byte πρώτα όταν εργάζεστε με μεγάλα αρχεία - Το
ImageProbeείναι εντελώς στατικό — χωρίς στιγμιότυπο, χωρίςIDisposable, χωρίς αντικείμενο διαμόρφωσης
Συνηθισμένα Προβλήματα
| Πρόβλημα | Αιτία | Διόρθωση |
|---|---|---|
Format είναι ImageFormat.Unknown | Η κεφαλίδα δεν ταιριάζει με καμία από τις 11 αναγνωρισμένες μορφές | Επιβεβαιώστε ότι το αρχείο είναι ένα από τα PNG, JPEG, GIF, BMP, WebP, ICO, TIFF, PSD, EMF, WMF ή DICOM |
Width/Height είναι null | Η κεφαλίδα της μορφής δεν περιέχει αυτό το πεδίο, ή η κεφαλίδα περικόπηκε πριν από αυτό το πεδίο | Ελέγξτε πρώτα το Format; δεν γεμίζουν όλα τα πεδία για κάθε μορφή |
| Το ύψος BMP φαίνεται απροσδόκητα θετικό | Το αρχείο προέλευσης χρησιμοποίησε αρνητικό (top-down) ύψος στην κεφαλίδα του | Αναμενόμενο — ImageInfo.Height πάντα κανονικοποιείται στο θετικό μέγεθος |
FAQ
Το ImageProbe αποκωδικοποιεί δεδομένα εικονοστοιχείων;
Όχι. Κάθε μέθοδος διαβάζει μόνο την κεφαλίδα του αρχείου — διαστάσεις, βάθος bit και αριθμός πλαισίων — ποτέ το περιεχόμενο των εικονοστοιχείων. Η αποκωδικοποίηση και η απόδοση βρίσκονται εκτός του πεδίου εφαρμογής αυτής της βιβλιοθήκης.
Τι συμβαίνει αν ελέγξω ένα κατεστραμμένο ή περικομμένο αρχείο;
ImageProbe δεν πετάει ποτέ για εσφαλμένη ή περικομμένη είσοδο. Επιστρέφει ένα ImageInfo με όποια πεδία μπόρεσε να καθορίσει από τα διαθέσιμα bytes της κεφαλίδας — το Format ορίζεται κάθε φορά που το σημάδι μορφής αναγνωρίζεται.
Μπορώ να ελέγξω μια ροή που δεν είναι δυνατόν να γίνει αναζήτηση;
Ναι. Το Probe(stream) δέχεται τόσο ροές που υποστηρίζουν αναζήτηση όσο και ροές που δεν την υποστηρίζουν.
API Reference Περίληψη
| Κλάση / Μέθοδος | Περιγραφή |
|---|---|
ImageProbe.ProbeFile(path) | Διερεύνηση ενός αρχείου με διαδρομή, επιστρέφοντας ένα ImageInfo |
ImageProbe.Probe(stream) | Διερεύνηση ενός Stream (με δυνατότητα αναζήτησης ή όχι) |
ImageProbe.Probe(data) | Διερεύνηση ενός ακατέργαστου byte[] |
ImageProbe.DetectFormat(stream) | Επιστρέψτε μόνο το ImageFormat για μια ροή |
ImageProbe.DetectFormat(data) | Επιστρέψτε μόνο το ImageFormat για ένα byte[] |
ImageInfo | Τύπος αποτελέσματος: Format, Width, Height, BitDepth, FrameCount |
ImageFormat | Απαρίθμηση: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom |