Χαρακτηριστικά και Λειτουργίες

Χαρακτηριστικά και Λειτουργίες

Χαρακτηριστικά και Λειτουργίες

Αυτή η σελίδα καλύπτει κάθε περιοχή λειτουργίας του 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
GIFFrameCount αντικατοπτρίζει τον αριθμό των καρέ όταν το αρχείο περιέχει πολλαπλά καρέ; παραλείπεται εάν ο αριθμός δεν μπορεί να προσδιοριστεί
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

Δείτε επίσης

 Ελληνικά