Πώς να εργαστείτε με το Aspose.Imaging FOSS Core API στο .NET

Πώς να εργαστείτε με το Aspose.Imaging FOSS Core API στο .NET

Aspose.Imaging FOSS για τη δημόσια επιφάνεια του .NET αποτελείται από τρεις κλάσεις: ImageProbe, ImageInfo και ImageFormat. Αυτός ο οδηγός εξηγεί την εγκατάσταση του πακέτου και τη χρήση και των τριών μαζί για την ανίχνευση μιας μορφής και την ανάγνωση των μεταδεδομένων της κεφαλίδας από ένα αρχείο, ένα ρεύμα και έναν πίνακα byte.

Οδηγός βήμα προς βήμα

Βήμα 1: Εγκατάσταση του πακέτου

git clone https://github.com/aspose-imaging-foss/Aspose.Imaging-FOSS-for-.NET.git
cd Aspose.Imaging-FOSS-for-.NET
dotnet build

Το πακέτο στοχεύει στο net8.0 και στο netstandard2.0 και δεν έχει εξωτερικές εξαρτήσεις χρόνου εκτέλεσης.


Βήμα 2: Εισαγωγή του Namespace

Προσθέστε μια μόνο εντολή using — αποκαλύπτει τα ImageProbe, ImageInfo και ImageFormat, ολόκληρη την επιφάνεια του API, έτσι δεν υπάρχει τίποτα άλλο προς εισαγωγή:

using Aspose.Imaging.Foss;

Βήμα 3: Εξετάστε ένα αρχείο με διαδρομή

ImageProbe.ProbeFile διαβάζει αρκετά μόνο από την κεφαλίδα του αρχείου για να δημιουργήσει ένα αποτέλεσμα ImageInfo — δεν αποκωδικοποιεί ποτέ τα δεδομένα pixel:

var info = ImageProbe.ProbeFile("photo.jpg");
Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}, {info.BitDepth}-bit");

Βήμα 4: Εξετάστε μια ροή ή έναν πίνακα byte

Όταν η εικόνα βρίσκεται ήδη στη μνήμη ή προέρχεται από ροή (ανέβασμα, απάντηση δικτύου), χρησιμοποιήστε τις υπερφορτώσεις που δέχονται αυτά απευθείας αντί να γράψετε πρώτα σε προσωρινό αρχείο:

byte[] bytes = File.ReadAllBytes("photo.jpg");
var infoFromBytes = ImageProbe.Probe(bytes);

using var stream = File.OpenRead("photo.jpg");
var infoFromStream = ImageProbe.Probe(stream);

Probe(stream) λειτουργεί τόσο με ροές που μπορούν να αναζητηθούν (seekable) όσο και με ροές που δεν μπορούν να αναζητηθούν (non-seekable).


Βήμα 5: Χρησιμοποιήστε το DetectFormat όταν χρειάζεστε μόνο τη μορφή

Αν χρειάζεστε μόνο να διακλαδώσετε με βάση τη μορφή και δεν χρειάζεστε διαστάσεις, βάθος χρώματος ή αριθμό πλαισίων, το DetectFormat παραλείπει το υπόλοιπο της ανάλυσης της κεφαλίδας:

var format = ImageProbe.DetectFormat(bytes);
if (format == ImageFormat.Dicom)
{
    // route to DICOM-specific handling
}

Βήμα 6: Διαβάστε με ασφάλεια τα Nullable ImageInfo πεδία

Width, Height, BitDepth και FrameCount είναι nullable — γεμίζουν μόνο όταν η κεφαλίδα του εντοπισμένου φορμάτ περιέχει πραγματικά αυτήν την τιμή. Το Format είναι το μοναδικό πεδίο που ορίζεται πάντα μόλις η κεφαλίδα αναγνωριστεί:

var info = ImageProbe.ProbeFile("scan.dcm");
if (info.Width.HasValue && info.Height.HasValue)
{
    Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}");
}
else
{
    Console.WriteLine($"{info.Format}: dimensions not available in this header");
}

Κοινά προβλήματα και διορθώσεις

Η μορφή εμφανίζεται ως ImageFormat.Unknown. Η κεφαλίδα του αρχείου δεν ταιριάζει με καμία από τις 11 αναγνωρισμένες μορφές (PNG, JPEG, GIF, BMP, WebP, ICO, TIFF, PSD, EMF, WMF, DICOM). Επιβεβαιώστε ότι το αρχείο είναι πραγματικά μία από αυτές τις μορφές — ImageProbe δεν απορρίπτει ποτέ για μη αναγνωρισμένη κεφαλίδα, αναφέρει Unknown αντίθετα.

Width/Height are null ακόμα και αν Format είναι ορισμένο. Δεν κάθε κεφαλίδα μορφής περιέχει κάθε πεδίο, και ένα περικομμένο αρχείο μπορεί να διακοπεί πριν τα byte ενός πεδίου. Ελέγξτε Format πρώτα, και μετά αντιμετωπίστε το υπόλοιπο ως προαιρετικό.

Calling Probe when DetectFormat θα έκανε. Probe and ProbeFile αναλύει την πλήρη κεφαλίδα; DetectFormat διαβάζει μόνο όσο χρειάζεται για την αναγνώριση της μορφής. Χρησιμοποιήστε DetectFormat αν ποτέ δεν διαβάζετε Width/Height/BitDepth/FrameCount.

Αναμένεται αποκωδικοποιημένα δεδομένα εικονοστοιχείων. ImageProbe δεν αποκωδικοποιεί, δεν αποδίδει ή δεν μετατρέπει το περιεχόμενο εικόνας — διαβάζει μόνο τα μεταδεδομένα της κεφαλίδας. Η αποκωδικοποίηση και οι λειτουργίες σε επίπεδο εικονοστοιχείων απαιτούν το εμπορικό Aspose.Imaging SDK.

Συχνές Ερωτήσεις

Τι συμβαίνει αν ελέγξω ένα περικομμένο ή κατεστραμμένο αρχείο;

ImageProbe δεν ρίχνει ποτέ εξαίρεση σε κακόμορφη ή περικομμένη είσοδο. Επιστρέφει ένα μερικό ImageInfo — το Format ορίζεται όποτε ο δείκτης μορφής της κεφαλίδας αναγνωρίστηκε, ακόμη και αν το υπόλοιπο του αρχείου είναι κομμένο.

Είναι το ImageProbe thread-safe;

Ναι. Το ImageProbe είναι στατικό και δεν διατηρεί μεταβλητή κατάσταση μεταξύ κλήσεων, έτσι οι ταυτόχρονες κλήσεις από πολλαπλά νήματα είναι ασφαλείς.

Μπορώ να δημιουργήσω ένα ImageInfo άμεσα, χωρίς να ελέγξω ένα πραγματικό αρχείο;

Ναι. Ο κατασκευαστής του ImageInfo είναι δημόσιος και απαιτεί μόνο το format — χρήσιμο για τη δημιουργία δοκιμαστικών διπλών: new ImageInfo(ImageFormat.Png, width: 64, height: 48).

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

Όχι. ImageProbe δεν περιέχει δικούς του πόρους IDisposable. Εάν περάσετε ένα Stream που ανοίξατε εσείς, παραμένετε υπεύθυνοι για την απόρριψή του.

Δείτε επίσης

 Ελληνικά