Caratteristiche e funzionalità
Funzionalità e Caratteristiche
Questa pagina copre ogni area funzionale di Aspose.Imaging FOSS per il rilevamento del formato e l’analisi dell’header API di .NET, con esempi funzionanti di C#. La libreria non decodifica mai i dati dei pixel — ogni metodo legge solo l’header del file.
Rilevamento del formato
ImageProbe è il punto di ingresso statico. Tre overload coprono un percorso file, uno stream e un array di byte grezzo:
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 parseUsa DetectFormat quando hai solo bisogno di distinguere il formato; usa Probe/ProbeFile quando ti servono anche dimensioni, profondità di bit o conteggio dei fotogrammi.
Lettura dei metadati dell’header
ProbeFile/Probe restituiscono un ImageInfo con nullable Width, Height, BitDepth e FrameCount — ciascuno popolato solo quando l’header del formato rilevato contiene effettivamente quel valore:
var info = ImageProbe.ProbeFile("scan.dcm");
if (info.Width.HasValue && info.Height.HasValue)
{
Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}");
}Format (un valore enum ImageFormat) è sempre impostato una volta che l’intestazione è riconosciuta — è l’unico campo garantito di essere popolato.
Note per formato
Alcuni formati hanno stranezze nell’intestazione che ImageInfo normalizza o espone direttamente:
| Formato | Behavior |
|---|---|
| GIF | FrameCount riflette il numero di fotogrammi quando il file contiene più fotogrammi; omesso se il conteggio non può essere determinato |
| BMP | Un’altezza negativa nell’intestazione (ordine delle righe dall’alto verso il basso) viene normalizzata — Height restituisce la magnitudine positiva |
| DICOM | L’analisi dell’intestazione gestisce le sintassi di trasferimento Implicit VR Little Endian ed Explicit VR Little/Big Endian, estraendo righe, colonne e bit allocati |
// 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");Formati supportati
Tutti gli 11 formati vengono rilevati nello stesso modo — ImageProbe identifica il formato e legge i metadati dell’intestazione; non decodifica né ricodifica mai i dati pixel per alcuno di essi. La popolazione dei campi varia realmente a seconda del formato, però — ogni formato imposta Format, ma solo alcuni includono la profondità di colore o il conteggio dei fotogrammi nella loro intestazione:
| Formato | Larghezza / Altezza | Profondità di bit | Conteggio fotogrammi |
|---|---|---|---|
| PNG | ✓ | ✓ | ✓ |
| JPEG | ✓ | ✓ | — |
| GIF | ✓ | — | ✓ |
| BMP | ✓ | ✓ | — |
| WebP | ✓ | — | — |
| ICO | ✓ | ✓ | ✓ |
| TIFF | ✓ | ✓ | ✓ |
| PSD | ✓ | ✓ | — |
| EMF | ✓ (da limiti) | — | — |
| WMF (posizionabile) | ✓ (presuppone 96 DPI) | — | — |
| DICOM | ✓ (Righe/Colonne) | ✓ (BitsAllocated) | — |
Un’intestazione non riconosciuta si risolve in ImageFormat.Unknown invece di generare un’eccezione. Alcuni dettagli notevoli sulla popolazione dei campi: il FrameCount di PNG è sempre 1 (una costante, non una reale rilevazione di fotogrammi PNG animati); il FrameCount di ICO è un vero conteggio delle dimensioni delle icone incorporate nella directory, e un byte di dimensione 0 in una voce della directory ICO significa 256px secondo le specifiche del formato; il FrameCount di TIFF riflette un percorso limitato della catena IFD del file (ogni IFD è una pagina); il WMF non posizionabile viene comunque identificato correttamente come ImageFormat.Wmf ma restituisce solo Format — le dimensioni vengono popolate solo per WMF posizionabile, tramite una conversione codificata a 96DPI dai limiti di unità-per-pollice dell’intestazione; EMF non ha alcun campo esplicito di larghezza/altezza, quindi le sue dimensioni sono derivate dal rettangolo dello spazio dispositivo rclBounds invece.
Resiliente per progettazione
ImageProbe non genera mai eccezioni su input malformati o troncati. Invece di sollevare un’eccezione, restituisce un ImageInfo parziale — Format è impostato ogni volta che il marcatore di formato dell’intestazione è stato riconosciuto, anche quando il resto del file è tagliato o corrotto:
byte[] truncated = fullFileBytes[..^3];
var info = ImageProbe.Probe(truncated);
// info.Format is still populated; other fields may be nullCiò lo rende sicuro da eseguire su download non attendibili, parziali o in corso senza un try/catch intorno a ogni chiamata.
Suggerimenti e migliori pratiche
- Usa
DetectFormatal posto diProbequando ti serve solo il formato, non le dimensioni - Controlla
Width/Height/BitDepth/FrameCountpernullprima di usarli — non sono popolati per ogni formato - Preferisci
Probe(stream)rispetto a leggere un intero file in un array di byte prima quando lavori con file di grandi dimensioni ImageProbeè interamente statico — nessuna istanza, nessunIDisposable, nessun oggetto di configurazione
Problemi comuni
| Problema | Cause | Correzione |
|---|---|---|
Format è ImageFormat.Unknown | L’intestazione non corrisponde a nessuno dei 11 formati riconosciuti | Conferma che il file sia uno tra PNG, JPEG, GIF, BMP, WebP, ICO, TIFF, PSD, EMF, WMF o DICOM |
Width/Height sono null | L’intestazione del formato non contiene quel campo, o l’intestazione è stata troncata prima di quel campo | Controlla prima Format; non tutti i campi sono popolati per ogni formato |
| L’altezza BMP sembra inaspettatamente positiva | Il file sorgente ha usato un’altezza negativa (top-down) nella sua intestazione | Previsto — ImageInfo.Height si normalizza sempre alla magnitudine positiva |
FAQ
Il ImageProbe decodifica i dati dei pixel?
No. Ogni metodo legge solo l’intestazione del file — dimensioni, profondità di colore e conteggio dei fotogrammi — mai il contenuto dei pixel. Decodifica e rendering sono al di fuori dello scopo di questa libreria.
Cosa succede se interrogo un file corrotto o troncato?
ImageProbe non genera mai eccezioni per input malformato o troncato. Restituisce un ImageInfo con i campi che è riuscito a determinare dai byte di intestazione disponibili — Format è impostato ogni volta che il marcatore del formato è stato riconosciuto.
Posso interrogare un stream che non è ricercabile?
Sì. Probe(stream) accetta sia stream ricercabili che non ricercabili.
API Reference Riepilogo
| Classe / Metodo | Descrizione |
|---|---|
ImageProbe.ProbeFile(path) | Interroga un file per percorso, restituendo un ImageInfo |
ImageProbe.Probe(stream) | Interroga un Stream (seekable o meno) |
ImageProbe.Probe(data) | Interroga un grezzo byte[] |
ImageProbe.DetectFormat(stream) | Restituisci solo il ImageFormat per un flusso |
ImageProbe.DetectFormat(data) | Restituisci solo il ImageFormat per un byte[] |
ImageInfo | Tipo di risultato: Format, Width, Height, BitDepth, FrameCount |
ImageFormat | Enum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom |