Jádro API

Základní API

Aspose.Imaging FOSS pro celý veřejný povrch .NET jsou tři třídy: ImageProbe (statická fasáda), ImageInfo (výsledná hodnota), a ImageFormat (formátové enum). Tato stránka popisuje, jak spolu zapadají jako kontrakt, mimo průvodce po jednotlivých funkcích v Funkce a vlastnosti.


Smlouva o třech třídách

  • ImageProbe — statické, bezstavové. Každé volání je nezávislé; není co konfigurovat ani uvolňovat.
  • ImageInfo — uzavřené, neměnné. Všech pět vlastností (Format, Width, Height, BitDepth, FrameCount).
  • ImageFormat — výčtový typ s jednou hodnotou pro každý rozpoznaný formát, plus 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 it

Konstrukce ImageInfo přímo

Konstruktor ImageInfo je veřejný — je vyžadováno pouze format, všechny ostatní parametry mají výchozí hodnotu null. To je užitečné pro jednotkové testy, které potřebují zástupný výsledek bez zkoumání skutečného souboru:

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);

Neexistuje odpovídající způsob, jak mutate an ImageInfo po vytvoření — každá vlastnost je jen pro čtení, takže prozkoumaná nebo vytvořená instance je bezpečná k předávání a ukládání do cache bez obranného kopírování.


Výběr správného přetížení

OverloadPoužít, když
ImageProbe.ProbeFile(path)Máte cestu k souboru a chcete úplný ImageInfo
ImageProbe.Probe(stream)Již máte otevřený Stream (schopný hledání nebo ne) a chcete úplný ImageInfo
ImageProbe.Probe(data)Už máte bajty v paměti a chcete celý ImageInfo
ImageProbe.DetectFormat(stream) / (data)Stačí vám jen větvit na ImageFormat — přeskočte parsování hlavičky za podpisem formátu

ProbeFile otevře a přečte soubor samotný — není potřeba nejprve otevřít FileStream jen kvůli volání Probe(stream).


Dávkové prozkoumání adresáře

Protože ImageProbe nikdy nevyhazuje, skenování adresáře ji může volat v úzkém cyklu bez try/catch pro každý soubor:

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}");
}

Každý soubor, jehož hlavička neodpovídá žádnému ze 11 rozpoznaných formátů, se vyhodnotí na ImageFormat.Unknown místo vyhození výjimky — výše uvedený cyklus nikdy nepotřebuje blok catch.


Smlouva never-throws

Nejedná se o náhodné chování — je to záměrná součást smlouvy API. Pokud je hlavička rozpoznaného formátu zkrácená nebo poškozená během parsování, ImageProbe stále vrací ImageInfo s Format nastaveným na formát, který rozpoznal; nepropaguje výjimku při parsování volajícímu. Pouze Format je garantováno — všechny ostatní vlastnosti považujte za volitelné bez ohledu na to, který formát byl detekován.


Časté problémy

ProblémPříčinaOprava
Sestrojený ImageInfo neodpovídá skutečnému výsledku sondyRučně vytvořené instance neověřují konzistenci mezi poliManuální konstrukci používejte jen pro testovací dvojice, ne jako náhradu za sondování skutečných souborů
Volání Probe, když by DetectFormat stačiloZbytečné parsování hlavičky, když je potřeba jen formátPoužijte DetectFormat, pokud jste nikdy nečetli Width/Height/BitDepth/FrameCount
Formát Unknown pro soubor, který očekáváte, že bude podporovánHlavička neodpovídá žádnému z 11 rozpoznaných podpisů, nebo je soubor zcela jiného formátuPotvrďte soubor oproti seznam podporovaných formátů

FAQ

Mohu podtřídit ImageInfo nebo ImageProbe?

Ne. ImageInfo je sealed a ImageProbe je static — žádný z nich není určen pro podtřídění ani pro vytvoření instance pomocí dědičnosti.

Je ImageProbe bezpečný pro více vláken?

ImageProbe neuchovává žádný měnitelný stav mezi voláními — každé volání Probe, ProbeFile nebo DetectFormat je nezávislé, což činí souběžná volání z více vláken bezpečnými.

Musím něco uvolnit?

Ne. ImageProbe nemá žádné vlastní IDisposable zdroje. Pokud předáte Stream, který jste otevřeli sami, zůstáváte zodpovědní za jeho uvolnění — Probe(stream) jej nezavře.


API Reference Shrnutí

Třída / MetodaPopis:
ImageProbe.ProbeFile(path)Prozkoumejte soubor podle cesty
ImageProbe.Probe(stream)Proveďte průzkum Stream
ImageProbe.Probe(data)Proveďte průzkum byte[]
ImageProbe.DetectFormat(stream)Pouze formát, z Stream
ImageProbe.DetectFormat(data)Pouze formát, z byte[]
ImageInfo(format, width, height, bitDepth, frameCount)Veřejný konstruktor — vyžaduje se pouze format
ImageInfo.Format / .Width / .Height / .BitDepth / .FrameCountVlastnosti výsledku pouze pro čtení
ImageFormatEnum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom

Viz také:

 Čeština