Funkce a vlastnosti
Funkce a vlastnosti
Tato stránka pokrývá všechny oblasti funkcí Aspose.Imaging FOSS pro .NET detekci formátu a prohledávání hlaviček API, s funkčními C# příklady. Knihovna nikdy neprovádí dekódování pixelových dat — každá metoda čte pouze hlavičku souboru.
Detekce formátu
ImageProbe je statický vstupní bod. Tři přetížení pokrývají cestu k souboru, proud a surové pole bajtů:
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 parsePoužijte DetectFormat, když potřebujete jen rozlišit formát; použijte Probe/ProbeFile, když potřebujete také rozměry, bitovou hloubku nebo počet snímků.
Čtení metadat hlavičky
ProbeFile/Probe vrací ImageInfo s nullable Width, Height, BitDepth a FrameCount — každý je naplněn pouze tehdy, když hlavička detekovaného formátu skutečně obsahuje tuto hodnotu:
var info = ImageProbe.ProbeFile("scan.dcm");
if (info.Width.HasValue && info.Height.HasValue)
{
Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}");
}Format (hodnota výčtu ImageFormat) je vždy nastavena, jakmile je hlavička rozpoznána — je to jediné pole, o kterém je zaručeno, že bude vyplněno.
Poznámky k formátům
Některé formáty mají zvláštnosti v hlavičce, které ImageInfo normalizuje nebo přímo zpřístupňuje:
| Formát | Behavior |
|---|---|
| GIF | FrameCount zobrazuje počet snímků, pokud soubor obsahuje více snímků; vynecháno, pokud nelze počet určit |
| BMP | Negativní výška v hlavičce (řazení řádků shora dolů) je normalizována — Height vrací kladnou hodnotu |
| DICOM | Zpracování hlavičky podporuje syntaxy přenosu Implicit VR Little Endian a Explicit VR Little/Big Endian, extrahuje řádky, sloupce a alokované bity |
// 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");Podporované formáty
Všech 11 formátů je detekováno stejným způsobem — ImageProbe identifikuje formát a čte metadata hlavičky; nikdy ne dekóduje ani neenkóduje pixelová data pro žádný z nich. Vyplňování polí se však skutečně liší podle formátu — každý formát nastavuje Format, ale jen některé v hlavičce obsahují hloubku bitů nebo počet snímků:
| Formát | Šířka / Výška | Bitová hloubka | Počet snímků |
|---|---|---|---|
| PNG | ✓ | ✓ | ✓ |
| JPEG | ✓ | ✓ | — |
| GIF | ✓ | — | ✓ |
| BMP | ✓ | ✓ | — |
| WebP | ✓ | — | — |
| ICO | ✓ | ✓ | ✓ |
| TIFF | ✓ | ✓ | ✓ |
| PSD | ✓ | ✓ | — |
| EMF | ✓ (z hranic) | — | — |
| WMF (umístitelný) | ✓ (předpokládá 96 DPI) | — | — |
| DICOM | ✓ (Řádky/sloupce) | ✓ (BitsAllocated) | — |
Nerozpoznaná hlavička se vyhodnotí na ImageFormat.Unknown místo vyhození výjimky. Několik pozoruhodných detailů ohledně vyplňování polí: PNG FrameCount je vždy 1 (konstanta, ne skutečná detekce animovaného PNG snímku); ICO FrameCount je skutečný počet vložených velikostí ikon v adresáři a 0 bajt rozměru v položce adresáře ICO znamená 256px podle specifikace formátu; TIFF FrameCount odráží omezený průchod řetězcem IFD souboru (každý IFD je jedna stránka); non-placeable WMF je stále správně identifikován jako ImageFormat.Wmf, ale vrací pouze Format — rozměry jsou vyplněny jen pro placeable WMF pomocí pevně zakódovaného převodu 96DPI z jednotek na palec v hlavičce; EMF vůbec neobsahuje explicitní pole šířka/výška, takže jeho rozměry jsou odvozeny z rclBounds obdélníku v device-space místo toho.
Odolný díky návrhu
ImageProbe nikdy nevyhazuje výjimku při poškozeném nebo zkráceném vstupu. Místo vyvolání výjimky vrací částečný ImageInfo — Format je nastaveno vždy, když byl rozpoznán formátový marker hlavičky, i když je zbytek souboru oříznutý nebo poškozený:
byte[] truncated = fullFileBytes[..^3];
var info = ImageProbe.Probe(truncated);
// info.Format is still populated; other fields may be nullTo umožňuje bezpečně spouštět proti nedůvěryhodným, částečným nebo probíhajícím stažením bez try/catch kolem každého volání.
Tipy a osvědčené postupy
- Použijte
DetectFormatmístoProbe, pokud potřebujete pouze formát, nikoli rozměry - Zkontrolujte
Width/Height/BitDepth/FrameCountnanullpřed jejich použitím — nejsou vyplněny pro každý formát - Upřednostněte
Probe(stream)před načítáním celého souboru do pole bajtů, když pracujete s velkými soubory ImageProbeje zcela statické — žádná instance, žádnýIDisposable, žádný konfigurační objekt
Časté problémy
| Problém | Příčina | Oprava |
|---|---|---|
Format je ImageFormat.Unknown | Hlavička neodpovídá žádnému ze 11 rozpoznaných formátů | Potvrďte, že soubor je jedním z PNG, JPEG, GIF, BMP, WebP, ICO, TIFF, PSD, EMF, WMF nebo DICOM |
Width/Height jsou null | Hlavička formátu neobsahuje toto pole, nebo byla hlavička zkrácena před tímto polem | Nejprve zkontrolujte Format; ne každé pole je vyplněno pro každý formát |
| Výška BMP vypadá neočekávaně kladně | Zdrojový soubor použil v hlavičce zápornou (shora dolů) výšku | Očekáváno — ImageInfo.Height se vždy normalizuje na kladnou velikost |
FAQ
Dekóduje ImageProbe data pixelů?
Ne. Každá metoda čte jen hlavičku souboru — rozměry, bitovou hloubku a počet snímků — nikdy obsah pixelů. Dekódování a vykreslování jsou mimo rozsah této knihovny.
Co se stane, když prozkoumám poškozený nebo zkrácený soubor?
ImageProbe nikdy nevyhazuje výjimku pro špatně formovaný nebo zkrácený vstup. Vrací ImageInfo s jakýmikoli poli, která mohla určit z dostupných bajtů hlavičky — Format je nastaveno, kdykoli byl rozpoznán samotný značkový formát.
Mohu prozkoumat stream, který není seekovatelný?
Ano. Probe(stream) přijímá jak seekovatelné, tak ne-seekovatelné streamy.
API Reference Shrnutí
| Třída / Metoda | Popis: |
|---|---|
ImageProbe.ProbeFile(path) | Prozkoumejte soubor podle cesty, vrátí ImageInfo |
ImageProbe.Probe(stream) | Prozkoumejte Stream (hledatelné nebo ne) |
ImageProbe.Probe(data) | Prozkoumejte surový byte[] |
ImageProbe.DetectFormat(stream) | Vrátit pouze ImageFormat pro stream |
ImageProbe.DetectFormat(data) | Vrátit pouze ImageFormat pro byte[] |
ImageInfo | Typ výsledku: Format, Width, Height, BitDepth, FrameCount |
ImageFormat | Výčet: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom |