Úvod
Aspose.Imaging FOSS pro .NET je bezplatná, pod licencí MIT, open-source knihovna pro .NET vývojáře, kteří potřebují vědět, co je soubor obrázku is — jeho formát, rozměry, bitová hloubka a počet snímků — aniž by bylo nutné zaplatit náklady na jeho dekódování. Statická ImageProbe třída je vstupní bod: ProbeFile(path) čte z disku, Probe(stream) and Probe(data) přijme proud nebo pole bajtů a DetectFormat(stream) / DetectFormat(data) vrátí ImageFormat enum hodnotu, aniž by se sestavoval kompletní ImageInfo, pro volající, kteří potřebují jen rozlišovat podle formátu. Každá metoda probe vrací an ImageInfo objekt s nullable Width, Height, BitDepth, a FrameCount vlastnosti, naplněny pouze když hlavička detekovaného formátu skutečně obsahuje tuto hodnotu.
Jedná se o úmyslně úzký nástroj a to je jeho podstata. Nekojuje pixely, nevykresluje obrázky ani nepřevádí mezi formáty — pro to je komerční produkt Aspose.Imaging pro .NET správnou volbou (odkaz níže v sekci Open Source & Licencování). Co Aspose.Imaging FOSS pro .NET dělá, je mnohem menší, mnohem častější úkol: odpovědět na otázku „jaký je to formát a jak velký je?“ co nejrychleji a co nejbezpečněji, pro třídu problémů, kde by plné dekódování bylo zbytečnou prací: ověřování nahrání, určení velikosti rozvržení miniatur, třídění šarže smíšených souborů nebo čtení polí hlavičky DICOM pro předzpracovatelskou kontrolu.
Knihovna je licencována pod MIT, nemá žádné externí závislosti a cílí na netstandard2.0 i net8.0 — je zdarma pro open-source i komerční použití, bez licenčních poplatků či omezení distribuce.
Klíčové vlastnosti
Tři způsoby, jak prozkoumat soubor
ImageProbe nabízí vstupní body pro cestu k souboru, proud i pole bajtů, takže se hodí kamkoli už ve vašem pipeline data obrázku již existují — na disku, v paměti nebo přicházejí po síti. DetectFormat vynechává vytvoření kompletního ImageInfo, pokud potřebujete jen rozlišit formát.
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
Strukturované, Upřímné výsledky
ImageInfo vystavuje Format (hodnota výčtu ImageFormat, vždy nastavena, jakmile je hlavička rozpoznána) spolu s nullable Width, Height, BitDepth a FrameCount. „Nullable“ zde opravdu něco dělá: naplnění polí se upřímně liší podle formátu a ImageInfo nikdy nevymýšlí hodnotu, kterou hlavička formátu neobsahuje. Kontrola null před použitím je správný vzor, nikoli obranná pocta.
var info = ImageProbe.ProbeFile("scan.dcm");
if (info.Width.HasValue && info.Height.HasValue)
{
Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}");
}
11 formátů, včetně tří, které v prostoru FOSS .NET nic dalšího neidentifikují
PNG, JPEG, GIF, BMP, WebP (ztrátové, bezztrátové a rozšířené), ICO, TIFF, PSD, EMF, WMF a DICOM. Vyplňování polí se záměrně liší podle formátu, ne kvůli vynechání — PNG obsahuje šířku, výšku, bitovou hloubku, and počet snímků (i když FrameCount je pevně zakódováno 1, ne skutečná detekce snímků animovaného PNG); FrameCount je skutečný počet vložených velikostí ikon v jeho adresáři a 0 byte v poli rozměru záznamu adresáře ICO znamená 256px, podle specifikace formátu; TIFF-u FrameCount odráží omezenou procházku řetězcem IFD souboru, jedno IFD na stránku.
Ze těchto jedenácti — PSD, EMF/WMF a DICOM — neexistuje žádný jiný volně dostupný open-source detektor .NET, o kterém bychom věděli, což je skutečná část důvodu existence této knihovny.
WMF a EMF: Dva starší formáty, dva odlišné limity
Neumístitelný WMF je stále správně identifikován jako ImageFormat.Wmf, ale pouze umístitelný WMF naplňuje rozměry — odvozené z hranic jednotek na palec v hlavičce pomocí pevně zakódované konverze 96 DPI, protože WMF sám neobsahuje žádnou absolutní velikost v pixelech. EMF vůbec neobsahuje explicitní pole šířka/výška; jeho rozměry pocházejí místo toho z obdélníku rclBounds v device-space v hlavičce EMF. Oba jsou poctivě odraženi v ImageInfo: když nelze hodnotu odvodit, vlastnost zůstane null místo hádání.
Parsování DICOM hlavičky bez prohlížeče
ImageProbe čte hlavičky DICOM napříč syntaktiky přenosu Implicit VR Little Endian a Explicit VR Little/Big Endian, extrahuje Rows do Height, Columns do Width a BitsAllocated do BitDepth — není vyžadován žádný DICOM prohlížeč ani externí závislost na zobrazování. Parsování je záměrně konzervativní: prvek sekvence s nedefinovanou délkou zastaví procházení místo hádání jeho obsahu, takže částečně pochopený DICOM soubor degraduje na částečný ImageInfo místo nesprávného.
Nikdy nevyhazuje výjimku při poškozeném nebo zkráceném vstupu
Probe je navrženo pro nedůvěryhodné, částečné nebo průběžné soubory. Pokud soubor odpovídá podpisu formátu, ale jeho hlavičku nelze plně rozparsovat — zkrácené stažení, poškozený upload — výsledek obsahuje pouze detekovaný Format místo výjimky.
byte[] truncated = fullFileBytes[..^3];
var info = ImageProbe.Probe(truncated);
// info.Format is still populated; other fields may be null
Rychlý start
Nainstalujte balíček, poté prozkoumejte soubor z disku, abyste v jednom volání přečetli jeho detekovaný formát, rozměry, bitovou hloubku a počet snímků, následované kontrolou pouze formátu pomocí surových bajtů:
git clone https://github.com/aspose-imaging-foss/Aspose.Imaging-FOSS-for-.NET.git
cd Aspose.Imaging-FOSS-for-.NET
dotnet buildusing Aspose.Imaging.Foss;
var info = ImageProbe.ProbeFile("photo.jpg");
Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}, {info.BitDepth}-bit, " +
$"{info.FrameCount ?? 0} frame(s)");
// Format-only detection when dimensions aren't needed
var bytes = File.ReadAllBytes("photo.jpg");
var format = ImageProbe.DetectFormat(bytes);
Podporované formáty
Aspose.Imaging FOSS pro .NET detects všechny níže uvedené 11 formátů a čte metadata na úrovni hlavičky—nedekóduje pixelová data, takže neexistuje schopnost „write“ k nahlášení. Naplnění polí se liší podle formátu; viz podrobný rozpis v sekci Klíčové vlastnosti výše.
| Formát | Přípona | Detected | Šířka / výška | Bitová hloubka | Počet snímků |
|---|---|---|---|---|---|
| PNG | .png | ✓ | ✓ | ✓ | ✓ |
| JPEG | .jpg / .jpeg | ✓ | ✓ | ✓ | — |
| GIF | .gif | ✓ | ✓ | — | ✓ |
| BMP | .bmp | ✓ | ✓ | ✓ | — |
| WebP | .webp | ✓ | ✓ | — | — |
| ICO | .ico | ✓ | ✓ | ✓ | ✓ |
| TIFF | .tif / .tiff | ✓ | ✓ | ✓ | ✓ |
| PSD | .psd | ✓ | ✓ | ✓ | — |
| EMF | .emf | ✓ | ✓ (z ohraničení) | — | — |
| WMF | .wmf | ✓ | ✓ (pouze umístitelný, 96 DPI) | — | — |
| DICOM | .dcm | ✓ | ✓ (Řádky/Sloupce) | ✓ (BitsAllocated) | — |
Open Source & Licencování
Aspose.Imaging FOSS pro .NET je MIT-licensed s nulovými externími závislostmi. Licence MIT umožňuje použití jak v open-source, tak komerčních projektech bez poplatků či omezení na redistribuci. Zdrojový kód je dostupný na GitHub. Je úmyslně omezen jen na detekci formátu — pro dekódování, úpravy nebo převod těchto obrazových formátů se podívejte na Aspose.Imaging pro .NET — Enterprise Product.