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 parse

Použ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átBehavior
GIFFrameCount zobrazuje počet snímků, pokud soubor obsahuje více snímků; vynecháno, pokud nelze počet určit
BMPNegativní výška v hlavičce (řazení řádků shora dolů) je normalizována — Height vrací kladnou hodnotu
DICOMZpracová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ýškaBitová hloubkaPoč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 null

To 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 DetectFormat místo Probe, pokud potřebujete pouze formát, nikoli rozměry
  • Zkontrolujte Width/Height/BitDepth/FrameCount na null př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
  • ImageProbe je zcela statické — žádná instance, žádný IDisposable, žádný konfigurační objekt

Časté problémy

ProblémPříčinaOprava
Format je ImageFormat.UnknownHlavič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 nullHlavička formátu neobsahuje toto pole, nebo byla hlavička zkrácena před tímto polemNejprve 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ýškuOč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 / MetodaPopis:
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[]
ImageInfoTyp výsledku: Format, Width, Height, BitDepth, FrameCount
ImageFormatVýčet: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom

Viz také:

 Čeština