Jak pracovat s Aspose.Imaging FOSS Core API v .NET
Aspose.Imaging FOSS pro veřejnou vrstvu .NET se skládá ze tří tříd: ImageProbe, ImageInfo a ImageFormat. Tento průvodce vás provede instalací balíčku a použitím všech tří společně k detekci formátu a čtení metadat hlavičky ze souboru, proudu a pole bajtů.
Krok za krokem
Krok 1: Nainstalujte balíček
git clone https://github.com/aspose-imaging-foss/Aspose.Imaging-FOSS-for-.NET.git
cd Aspose.Imaging-FOSS-for-.NET
dotnet buildBalíček cílí na net8.0 a netstandard2.0 a nemá žádné externí runtime závislosti.
Krok 2: Importujte jmenný prostor
Přidejte jediný using direktivu — odhalí ImageProbe, ImageInfo a ImageFormat, celou plochu API, takže není potřeba nic dalšího importovat:
using Aspose.Imaging.Foss;Krok 3: Prozkoumat soubor podle cesty
ImageProbe.ProbeFile načte právě tolik hlavičky souboru, aby vyplnil výsledek ImageInfo — nikdy nedekóduje pixelová data:
var info = ImageProbe.ProbeFile("photo.jpg");
Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}, {info.BitDepth}-bit");Krok 4: Prozkoumat stream nebo pole bajtů
Když je obrázek již v paměti nebo pochází ze streamu (nahrání, síťová odpověď), použijte přetížené verze, které je přijímají přímo, místo aby se nejprve zapisovalo do dočasného souboru:
byte[] bytes = File.ReadAllBytes("photo.jpg");
var infoFromBytes = ImageProbe.Probe(bytes);
using var stream = File.OpenRead("photo.jpg");
var infoFromStream = ImageProbe.Probe(stream);Probe(stream) funguje jak se seekovatelnými, tak i ne-seekovatelnými streamy.
Krok 5: Použijte DetectFormat, pokud potřebujete jen formát
Pokud potřebujete jen rozlišovat podle formátu a nepotřebujete rozměry, bitovou hloubku ani počet snímků, DetectFormat přeskočí zbytek parsování hlavičky:
var format = ImageProbe.DetectFormat(bytes);
if (format == ImageFormat.Dicom)
{
// route to DICOM-specific handling
}Krok6: Bezpečně číst nullable ImageInfo pole
Width, Height, BitDepth a FrameCount jsou nullable— jsou vyplněny jen tehdy, když hlavička detekovaného formátu skutečně obsahuje tuto hodnotu. Format je jediné pole, které je vždy nastaveno, jakmile je hlavička rozpoznána:
var info = ImageProbe.ProbeFile("scan.dcm");
if (info.Width.HasValue && info.Height.HasValue)
{
Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}");
}
else
{
Console.WriteLine($"{info.Format}: dimensions not available in this header");
}Časté problémy a opravy
Formát se zobrazuje jako ImageFormat.Unknown. Hlavička souboru neodpovídá žádnému z 11 rozpoznaných formátů (PNG, JPEG, GIF, BMP, WebP, ICO, TIFF, PSD, EMF, WMF, DICOM). Ověřte, že soubor je skutečně jedním z těchto formátů — ImageProbe nikdy nevyhazuje pro nerozpoznanou hlavičku, hlásí Unknown namísto toho.
Width/Height are null i když Format je nastaveno. Ne každá hlavička formátu obsahuje všechna pole a oříznutý soubor může skončit před bajty pole. Zkontrolujte Format nejprve, poté považujte zbytek za volitelný.
Calling Probe when DetectFormat by to stačilo. Probe and ProbeFile zpracovat celý záhlaví; DetectFormat pouze načte tolik, aby určil formát. Použijte DetectFormat pokud nikdy nečtete Width/Height/BitDepth/FrameCount.
Očekává se dekódovaná pixelová data. ImageProbe nikdy nedekóduje, nerenderuje ani nepřevádí obsah obrázku — pouze čte metadata záhlaví. Dekódování a operace na úrovni pixelů vyžadují komerční Aspose.Imaging SDK.
Často kladené otázky
Co se stane, pokud prozkoumám zkrácený nebo poškozený soubor?
ImageProbe nikdy nevyhazuje výjimku při špatně formovaném nebo zkráceném vstupu. Vrací částečný ImageInfo — Format je nastaveno vždy, když byl rozpoznán formátový marker hlavičky, i když je zbytek souboru zkrácen.
Je ImageProbe bezpečný pro vlákna?
Ano. ImageProbe je statický a mezi voláními neuchovává žádný měnitelný stav, takže souběžná volání z více vláken jsou bezpečná.
Mohu přímo vytvořit ImageInfo bez prozkoumání reálného souboru?
Ano. Konstruktor ImageInfo je veřejný a vyžaduje pouze format — užitečné pro vytváření testovacích dvojic: new ImageInfo(ImageFormat.Png, width: 64, height: 48).
Musím něco uvolnit?
Číslo ImageProbe neobsahuje žádné vlastní IDisposable zdroje. Pokud předáte Stream, který jste si otevřeli, zůstáváte zodpovědní za jeho uvolnění.