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 itCostruire 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
| Overload | Usa 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
| Problema | Cause | Correzione |
|---|---|---|
Il ImageInfo costruito non corrisponde a un risultato di probe reale. | Le istanze costruite manualmente non convalidano la coerenza tra i campi | Usa la costruzione manuale solo per i doppi di test, non come sostituto per l’analisi dei file reali |
Chiamare Probe quando DetectFormat basterebbe | Analisi dell’header non necessaria quando è necessario solo il formato | Usa DetectFormat se non leggi mai Width/Height/BitDepth/FrameCount |
Formato Unknown per un file che ti aspetti sia supportato | L’header non corrisponde a nessuna delle 11 firme riconosciute, o il file è di un formato completamente diverso | Conferma 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 / Metodo | Descrizione |
|---|---|
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 / .FrameCount | Proprietà di risultato in sola lettura |
ImageFormat | Enum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom |