Πυρήνας API

Πυρήνας API

Aspose.Imaging FOSS για το συνολικό δημόσιο επίπεδο του .NET αποτελείται από τρεις κλάσεις: ImageProbe (η στατική πρόσοψη), ImageInfo (η τιμή αποτελέσματος), και ImageFormat (η απαρίθμηση μορφής). Αυτή η σελίδα καλύπτει πώς συνδυάζονται ως συμβόλαιο, πέρα από την περιήγηση ανά δυνατότητα στο Δυνατότητες και Λειτουργίες.


Η σύμβαση τριών κλάσεων

  • ImageProbe — στατικό, χωρίς κατάσταση. Κάθε κλήση είναι ανεξάρτητη· δεν υπάρχει τίποτα προς ρύθμιση ή απελευθέρωση.
  • ImageInfo — σφραγισμένο, αμετάβλητο. Όλες οι πέντε ιδιότητες (Format, Width, Height, BitDepth, FrameCount) είναι μόνο για ανάγνωση μετά την κατασκευή.
  • ImageFormat — ένας enum με μία τιμή για κάθε αναγνωρισμένη μορφή, συν Unknown.
using Aspose.Imaging.Foss;

var info = ImageProbe.ProbeFile("photo.jpg");
ImageFormat format = info.Format;   // always set
int? width = info.Width;            // set only when the format's header carries it

Δημιουργώντας το ImageInfo άμεσα

Ο κατασκευαστής του ImageInfo είναι δημόσιος — απαιτείται μόνο το format, κάθε άλλη παράμετρος προεπιλέγεται σε null. Αυτό είναι χρήσιμο για μονάδες δοκιμής που χρειάζονται ένα εναλλακτικό αποτέλεσμα χωρίς να ελέγχουν ένα πραγματικό αρχείο:

using Aspose.Imaging.Foss;

// Fake a PNG result for a test double, with no dimensions
var fakeInfo = new ImageInfo(ImageFormat.Png);

// Fake a fully-populated result
var fullInfo = new ImageInfo(ImageFormat.Gif, width: 64, height: 48, bitDepth: 8, frameCount: 3);

Δεν υπάρχει αντίστοιχος τρόπος για να mutate an ImageInfo μετά την κατασκευή — κάθε ιδιότητα είναι μόνο για ανάγνωση, έτσι ένα ανιχνευμένο ή κατασκευασμένο αντικείμενο είναι ασφαλές να μεταβιβάζεται και να αποθηκεύεται στην κρυφή μνήμη χωρίς αντιγραφή προστασίας.


Επιλογή της σωστής υπερφόρτωσης

OverloadΧρησιμοποιήστε όταν
ImageProbe.ProbeFile(path)Έχετε μια διαδρομή αρχείου και θέλετε το πλήρες ImageInfo
ImageProbe.Probe(stream)Έχετε ήδη ένα ανοιχτό Stream (με δυνατότητα αναζήτησης ή χωρίς) και θέλετε το πλήρες ImageInfo
ImageProbe.Probe(data)Έχετε ήδη τα bytes στη μνήμη και θέλετε το πλήρες ImageInfo
ImageProbe.DetectFormat(stream) / (data)Χρειάζεται μόνο να κάνετε διακλάδωση στο ImageFormat — παραλείψτε την ανάλυση της κεφαλίδας πέρα από την υπογραφή μορφής

Το ProbeFile ανοίγει και διαβάζει το αρχείο μόνο του — δεν χρειάζεται να ανοίξετε πρώτα ένα FileStream μόνο για να καλέσετε το Probe(stream).


Μαζική ανίχνευση καταλόγου

Επειδή το ImageProbe δεν ρίχνει ποτέ εξαίρεση, μια σάρωση καταλόγου μπορεί να το καλέσει σε βρόχο χωρίς καθυστέρηση χωρίς try/catch ανά αρχείο:

using Aspose.Imaging.Foss;

foreach (var path in Directory.GetFiles("incoming"))
{
    var info = ImageProbe.ProbeFile(path);

    if (info.Format == ImageFormat.Unknown)
    {
        Console.WriteLine($"{path}: not a recognized image format, skipping");
        continue;
    }

    Console.WriteLine($"{path}: {info.Format} {info.Width}x{info.Height}");
}

Οποιοδήποτε αρχείο του οποίου η κεφαλίδα δεν ταιριάζει με μία από τις 11 αναγνωρισμένες μορφές επιστρέφει το ImageFormat.Unknown αντί να ρίξει εξαίρεση — ο παραπάνω βρόχος δεν χρειάζεται ποτέ μπλοκ catch.


Η σύμβαση χωρίς ρίψη εξαιρέσεων

Αυτό δεν είναι περιστασιακή συμπεριφορά — είναι ένα σκόπιμο μέρος του συμβολαίου API. Εάν η κεφαλίδα ενός αναγνωρισμένου μορφότυπου κοπεί ή είναι κατεστραμμένη κατά τη διάρκεια της ανάλυσης, το ImageProbe εξακολουθεί να επιστρέφει ένα ImageInfo με το Format ορισμένο στο μορφότυπο που αναγνώρισε· δεν προωθεί εξαίρεση ανάλυσης στον καλούντα. Μόνο το Format είναι εγγυημένο — θεωρήστε κάθε άλλη ιδιότητα προαιρετική ανεξαρτήτως του μορφότυπου που εντοπίστηκε.


Κοινά Προβλήματα

ΠρόβλημαΑιτίαΔιόρθωση
Το κατασκευασμένο ImageInfo δεν ταιριάζει με πραγματικό αποτέλεσμα ανίχνευσηςΟι χειροκίνητα κατασκευασμένες παραδείγματα δεν επαληθεύουν τη συνέπεια μεταξύ των πεδίωνΧρησιμοποιήστε τη χειροκίνητη κατασκευή μόνο για δοκιμαστικά διπλότυπα, όχι ως υποκατάστατο για την ανίχνευση πραγματικών αρχείων
Κλήση του Probe όταν το DetectFormat αρκείΑχρείαστη ανάλυση κεφαλίδας όταν χρειάζεται μόνο η μορφήΧρησιμοποιήστε το DetectFormat εάν ποτέ δεν διαβάζετε το Width/Height/BitDepth/FrameCount
Μορφή Unknown για ένα αρχείο που αναμένετε να υποστηρίζεταιΗ κεφαλίδα δεν ταιριάζει με καμία από τις 11 αναγνωρισμένες υπογραφές, ή το αρχείο είναι εντελώς διαφορετική μορφήΕπιβεβαιώστε το αρχείο έναντι του λίστα υποστηριζόμενων μορφών

FAQ

Μπορώ να δημιουργήσω υποκλάση του ImageInfo ή του ImageProbe;

Όχι. Το ImageInfo είναι sealed και το ImageProbe είναι static — κανένα δεν έχει σχεδιαστεί για υποκλάση ή δημιουργία στιγμιοτύπου μέσω κληρονομικότητας.

Είναι το ImageProbe ασφαλές για νήματα;

Το ImageProbe δεν διατηρεί μεταβλητή κατάσταση μεταξύ κλήσεων — κάθε κλήση στο Probe, ProbeFile ή DetectFormat είναι ανεξάρτητη, καθιστώντας τις ταυτόχρονες κλήσεις από πολλαπλά νήματα ασφαλείς.

Πρέπει να απελευθερώσω κάτι;

Αριθ. ImageProbe δεν διαθέτει δικά του IDisposable πόρους. Αν περάσετε ένα Stream που ανοίξατε εσείς, παραμένετε υπεύθυνοι για την εκκαθάριση εκείνης της ροής — το Probe(stream) δεν το κλείνει.


API Reference Περίληψη

Κλάση / ΜέθοδοςΠεριγραφή
ImageProbe.ProbeFile(path)Εντοπισμός αρχείου με διαδρομή
ImageProbe.Probe(stream)Εντοπισμός Stream
ImageProbe.Probe(data)Διερεύνηση ενός byte[]
ImageProbe.DetectFormat(stream)Μόνο μορφή, από ένα Stream
ImageProbe.DetectFormat(data)Μόνο μορφή, από ένα byte[]
ImageInfo(format, width, height, bitDepth, frameCount)Δημόσιος κατασκευαστής — απαιτείται μόνο το format
ImageInfo.Format / .Width / .Height / .BitDepth / .FrameCountΙδιότητες αποτελέσματος μόνο για ανάγνωση
ImageFormatΑπαρίθμηση: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom

Δείτε επίσης

 Ελληνικά