Caracteristici și funcționalități
Caracteristici și funcționalități
Această pagină acoperă fiecare domeniu de funcționalitate al Aspose.Imaging FOSS pentru detectarea formatului .NET și sonorizarea antetului API, cu exemple C# funcționale. Biblioteca nu decodează niciodată datele pixel — fiecare metodă citește doar antetul fișierului.
Detectarea formatului
ImageProbe este punctul de intrare static. Trei suprasarcini acoperă o cale de fișier, un flux și un tablou brut de octeți:
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 parseFolosește DetectFormat când ai nevoie doar să alegi în funcție de format; folosește Probe/ProbeFile când ai nevoie și de dimensiuni, adâncime de biți sau număr de cadre.
Citirea metadatelor antetului
ProbeFile/Probe returnă un ImageInfo cu nullable Width, Height, BitDepth și FrameCount — fiecare completat doar când antetul formatului detectat conține efectiv acea valoare:
var info = ImageProbe.ProbeFile("scan.dcm");
if (info.Width.HasValue && info.Height.HasValue)
{
Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}");
}Format (o valoare enum ImageFormat) este întotdeauna setată odată ce antetul este recunoscut — este singurul câmp garantat să fie populat.
Note pe format
Câteva formate au particularități ale antetului pe care ImageInfo le normalizează sau le expune direct:
| Format | Behavior |
|---|---|
| GIF | FrameCount reflectă numărul de cadre când fișierul conține mai multe cadre; este omis dacă numărul nu poate fi determinat |
| BMP | O înălțime negativă în antet (ordine de rânduri de sus în jos) este normalizată — Height returnează magnitudinea pozitivă |
| DICOM | Analiza antetului gestionează sintaxele de transfer Implicit VR Little Endian și Explicit VR Little/Big Endian, extrăgând rândurile, coloanele și biții alocați |
// 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");Formate suportate
Toate cele 11 formate sunt detectate în același mod — ImageProbe identifică formatul și citește metadatele antetului; nu decodează niciodată și nu recodifică datele pixel pentru niciunul dintre ele. Popularea câmpurilor variază cu adevărat în funcție de format — fiecare format setează Format, dar doar unele includ adâncimea de biți sau numărul de cadre în antetul lor:
| Format | Lățime / Înălțime | Adâncime de biți | Număr de cadre |
|---|---|---|---|
| PNG | ✓ | ✓ | ✓ |
| JPEG | ✓ | ✓ | — |
| GIF | ✓ | — | ✓ |
| BMP | ✓ | ✓ | — |
| WebP | ✓ | — | — |
| ICO | ✓ | ✓ | ✓ |
| TIFF | ✓ | ✓ | ✓ |
| PSD | ✓ | ✓ | — |
| EMF | ✓ (din limite) | — | — |
| WMF (de plasat) | ✓ (presupune 96 DPI) | — | — |
| DICOM | ✓ (Rânduri/Coloane) | ✓ (BitsAllocated) | — |
Un antet nerecunoscut se rezolvă la ImageFormat.Unknown în loc să arunce o excepție. Câteva detalii notabile privind popularea câmpurilor: FrameCount al PNG este întotdeauna 1 (o constantă, nu o detectare reală de cadre PNG animate); FrameCount al ICO este un număr real al dimensiunilor pictogramelor încorporate în director, și un octet de dimensiune 0 într-o intrare de director ICO înseamnă 256px conform specificației formatului; FrameCount al TIFF reflectă o parcurgere limitată a lanțului IFD al fișierului (fiecare IFD reprezintă o pagină); WMF ne-placeable este tot identificat corect ca ImageFormat.Wmf, dar returnează numai Format — dimensiunile sunt populate doar pentru WMF placeable, printr-o conversie hardcodată de 96 DPI din limitele unităților-pe-inches ale antetului; EMF nu are deloc câmp explicit de lățime/înălțime, astfel încât dimensiunile sale sunt deduse din dreptunghiul spațiului dispozitiv rclBounds.
Rezistent prin proiectare
ImageProbe nu aruncă niciodată pe intrări malformate sau trunchiate. În loc să ridice o excepție, returnează un ImageInfo parțial — Format este setat ori de câte ori markerul de format al antetului a fost recunoscut, chiar și atunci când restul fișierului este tăiat sau corupt:
byte[] truncated = fullFileBytes[..^3];
var info = ImageProbe.Probe(truncated);
// info.Format is still populated; other fields may be nullAcest lucru îl face sigur de rulat împotriva descărcărilor neîncrezătoare, parțiale sau în curs, fără a avea nevoie de un try/catch la fiecare apel.
Sfaturi și cele mai bune practici
- Utilizați
DetectFormatîn loc deProbecând aveți nevoie doar de format, nu de dimensiuni - Verificați
Width/Height/BitDepth/FrameCountpentrunullînainte de a le folosi — nu sunt completate pentru fiecare format - Preferați
Probe(stream)în locul citirii unui fișier întreg într-un tablou de octeți mai întâi când lucrați cu fișiere mari ImageProbeeste complet static — nu există instanță, nuIDisposable, nici obiect de configurare
Probleme comune
| Problemă | Cauză | Remediere |
|---|---|---|
Format este ImageFormat.Unknown | Antetul nu corespunde niciunuia dintre cele 11 formate recunoscute | Confirmați că fișierul este unul dintre PNG, JPEG, GIF, BMP, WebP, ICO, TIFF, PSD, EMF, WMF sau DICOM |
Width/Height sunt null | Antetul formatului nu conține acel câmp, sau antetul a fost trunchiat înainte de acel câmp | Verificați mai întâi Format; nu toate câmpurile sunt completate pentru fiecare format |
| Înălțimea BMP pare neașteptat pozitivă | Fișierul sursă a utilizat o înălțime negativă (de sus în jos) în antetul său | Se așteaptă — ImageInfo.Height se normalizează întotdeauna la magnitudinea pozitivă |
FAQ
Decodează ImageProbe datele de pixeli?
Nu. Fiecare metodă citește doar antetul fișierului — dimensiunile, adâncimea de biți și numărul de cadre — niciodată conținutul pixelilor. Decodarea și redarea sunt în afara domeniului acestei biblioteci.
Ce se întâmplă dacă sondez un fișier corupt sau trunchiat?
ImageProbe nu aruncă niciodată excepții pentru intrări malformate sau trunchiate. Returnează un ImageInfo cu orice câmpuri a putut determina din octeții de antet disponibili — Format este setat ori de câte ori markerul de format a fost recunoscut.
Pot să sondez un flux care nu este seekable?
Da. Probe(stream) acceptă atât fluxuri seekable, cât și fluxuri non-seekable.
API Reference Rezumat
| Clasă / Metodă | Descriere: |
|---|---|
ImageProbe.ProbeFile(path) | Probează un fișier prin cale, returnând un ImageInfo |
ImageProbe.Probe(stream) | Probează un Stream (seekable sau nu) |
ImageProbe.Probe(data) | Probează un byte[] brut |
ImageProbe.DetectFormat(stream) | Returnează doar ImageFormat pentru un flux |
ImageProbe.DetectFormat(data) | Returnează doar ImageFormat pentru un byte[] |
ImageInfo | Tip rezultat: Format, Width, Height, BitDepth, FrameCount |
ImageFormat | Enum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom |