Nucleo API

API principale

Aspose.Imaging FOSS per l’intera superficie pubblica di .NET è composta da tre classi: ImageProbe (la facciata statica), ImageInfo (il valore di risultato), e ImageFormat (l’enum del formato). Questa pagina spiega come si combinano come contratto, oltre al tour per funzionalità in Funzionalità e Caratteristiche.


Il contratto a tre classi

  • ImageProbe — statico, senza stato. Ogni chiamata è indipendente; non c’è nulla da configurare o rilasciare.
  • ImageInfo — sigillato, immutabile. Tutte e cinque le proprietà (Format, Width, Height, BitDepth, FrameCount) sono di sola lettura una volta costruite.
  • ImageFormat — un enum con un valore per ogni formato riconosciuto, più 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

Costruire ImageInfo direttamente

Il costruttore di ImageInfo è pubblico — è richiesto solo format, tutti gli altri parametri hanno valore predefinito null. Questo è utile per i test unitari che necessitano di un risultato sostitutivo senza esaminare un file reale:

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);

Non esiste un modo corrispondente per mutate an ImageInfo dopo la costruzione — ogni proprietà è solo di lettura, quindi un’istanza sondata o costruita è sicura da passare e memorizzare nella cache senza copie difensive.


Scegliere il sovraccarico corretto

OverloadUsa quando
ImageProbe.ProbeFile(path)Hai un percorso di file e desideri il ImageInfo completo
ImageProbe.Probe(stream)Hai già un Stream aperto (ricercabile o meno) e vuoi il ImageInfo completo
ImageProbe.Probe(data)Hai già i byte in memoria e vuoi il ImageInfo completo.
ImageProbe.DetectFormat(stream) / (data)Devi solo bifurcare su ImageFormat — salta l’analisi dell’intestazione oltre la firma del formato.

ProbeFile apre e legge il file da solo — non è necessario aprire prima un FileStream solo per chiamare Probe(stream).


Sondaggio batch di una directory

Poiché ImageProbe non genera mai eccezioni, una scansione della directory può chiamarlo in un ciclo serrato senza try/catch per ogni file:

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}");
}

Qualsiasi file il cui header non corrisponde a uno dei 11 formati riconosciuti risolve in ImageFormat.Unknown invece di generare un’eccezione — il ciclo sopra non ha mai bisogno di un blocco catch.


Il contratto che non lancia eccezioni

Questo non è un comportamento incidentale — è una parte deliberata del contratto API. Se l’header di un formato riconosciuto è troncato o malformato a metà dell’analisi, ImageProbe restituisce comunque un ImageInfo con Format impostato al formato riconosciuto; non propaga un’eccezione di parsing al chiamante. Solo Format è garantito — tratta tutte le altre proprietà come opzionali indipendentemente dal formato rilevato.


Problemi comuni

ProblemaCauseCorrezione
Il ImageInfo costruito non corrisponde a un risultato di probe reale.Le istanze costruite manualmente non convalidano la coerenza tra i campiUsa la costruzione manuale solo per i doppi di test, non come sostituto per l’analisi dei file reali
Chiamare Probe quando DetectFormat basterebbeAnalisi dell’header non necessaria quando è necessario solo il formatoUsa DetectFormat se non leggi mai Width/Height/BitDepth/FrameCount
Formato Unknown per un file che ti aspetti sia supportatoL’header non corrisponde a nessuna delle 11 firme riconosciute, o il file è di un formato completamente diversoConferma il file rispetto al elenco dei formati supportati

FAQ

Posso creare una sottoclasse di ImageInfo o ImageProbe?

No. ImageInfo è sealed e ImageProbe è static — nessuno dei due è progettato per la sottoclasse o per l’instanziazione tramite ereditarietà.

È ImageProbe thread-safe?

ImageProbe non mantiene alcuno stato mutabile tra le chiamate — ogni chiamata a Probe, ProbeFile o DetectFormat è indipendente, rendendo sicure le chiamate concorrenti da più thread.

Devo rilasciare qualcosa?

No. ImageProbe non ha risorse IDisposable proprie. Se passi un Stream che hai aperto tu, rimani responsabile del rilascio di quel flusso — Probe(stream) non lo chiude.


API Reference Riepilogo

Classe / MetodoDescrizione
ImageProbe.ProbeFile(path)Verifica un file per percorso
ImageProbe.Probe(stream)Verifica un Stream
ImageProbe.Probe(data)Verifica un byte[]
ImageProbe.DetectFormat(stream)Solo formato, da un Stream
ImageProbe.DetectFormat(data)Solo formato, da un byte[]
ImageInfo(format, width, height, bitDepth, frameCount)Costruttore pubblico — è richiesto solo format
ImageInfo.Format / .Width / .Height / .BitDepth / .FrameCountProprietà di risultato in sola lettura
ImageFormatEnum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom

Vedi anche

 Italiano