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, plusUnknown.
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 itKonstrukce 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í
| Overload | Použí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ém | Příčina | Oprava |
|---|---|---|
Sestrojený ImageInfo neodpovídá skutečnému výsledku sondy | Ručně vytvořené instance neověřují konzistenci mezi poli | Manuá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čilo | Zbytečné parsování hlavičky, když je potřeba jen formát | Použijte DetectFormat, pokud jste nikdy nečetli Width/Height/BitDepth/FrameCount |
Formát Unknown pro soubor, který očekáváte, že bude podporován | Hlavička neodpovídá žádnému z 11 rozpoznaných podpisů, nebo je soubor zcela jiného formátu | Potvrď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 / Metoda | Popis: |
|---|---|
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 / .FrameCount | Vlastnosti výsledku pouze pro čtení |
ImageFormat | Enum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom |