Wprowadzenie
Aspose.Imaging FOSS dla .NET jest darmową, na licencji MIT, otwarto-źródłową biblioteką dla programistów .NET, którzy potrzebują wiedzieć, co to jest plik obrazu is — jego format, wymiary, głębia bitowa i liczba klatek — bez ponoszenia kosztów jego dekodowania. Statyczna ImageProbe klasa jest punktem wejścia: ProbeFile(path) odczytuje z dysku, Probe(stream) and Probe(data) akceptuje strumień lub tablicę bajtów oraz DetectFormat(stream) / DetectFormat(data) zwraca ImageFormat wartość wyliczenia bez budowania pełnego ImageInfo, dla wywołujących, którzy potrzebują jedynie rozgałęzić się w zależności od formatu. Każda metoda probe zwraca an ImageInfo obiekt z możliwością null Width, Height, BitDepth, i FrameCount właściwości, wypełniane tylko wtedy, gdy nagłówek wykrytego formatu rzeczywiście zawiera tę wartość.
To jest celowo wąskie narzędzie i właśnie o to chodzi. Nie dekoduje pikseli, nie renderuje obrazów ani nie konwertuje między formatami — w tym celu odpowiednim wyborem jest komercyjny produkt Aspose.Imaging dla .NET (link poniżej w sekcji Open Source i Licencjonowanie). To, co robi Aspose.Imaging FOSS dla .NET, to znacznie mniejsze, znacznie częstsze zadanie odpowiadania na pytanie „jaki to format i jak duży jest?” tak szybko i tak bezpiecznie, jak to możliwe, dla klasy problemów, w których pełne dekodowanie byłoby zmarnowanym wysiłkiem: walidacja przesyłania, określanie rozmiaru układu miniatur, triage partii mieszanych plików lub odczyt pól nagłówka DICOM w celu wstępnej kontroli.
Biblioteka jest na licencji MIT, nie ma żadnych zewnętrznych zależności i obsługuje zarówno netstandard2.0, jak i net8.0 — jest darmowa zarówno dla zastosowań otwartoźródłowych, jak i komercyjnych, bez opłat licencyjnych ani ograniczeń w dystrybucji.
Kluczowe funkcje
Trzy sposoby sondowania pliku
ImageProbe oferuje punkty wejścia w postaci ścieżki do pliku, strumienia i tablicy bajtów, więc pasuje tam, gdzie dane obrazu już znajdują się w Twoim potoku — na dysku, w pamięci lub przychodzące przez sieć. DetectFormat pomija budowanie pełnego ImageInfo, gdy potrzebujesz jedynie rozgałęzić się na podstawie formatu.
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
Ustrukturyzowane, Szczere Wyniki
ImageInfo udostępnia Format (wartość wyliczeniowa ImageFormat, zawsze ustawiana po rozpoznaniu nagłówka) obok nullable Width, Height, BitDepth i FrameCount. “Nullable” odgrywa tutaj prawdziwą rolę: wypełnianie pól rzeczywiście różni się w zależności od formatu, a ImageInfo nigdy nie wytwarza wartości, której nagłówek formatu nie zawiera. Sprawdzanie null przed użyciem jest właściwym wzorcem, a nie defensywną myślą po fakcie.
var info = ImageProbe.ProbeFile("scan.dcm");
if (info.Width.HasValue && info.Height.HasValue)
{
Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}");
}
11 formatów, w tym trzy, które nic innego nie wykrywa w przestrzeni FOSS .NET
PNG, JPEG, GIF, BMP, WebP (stratny, bezstratny i rozszerzony), ICO, TIFF, PSD, EMF, WMF oraz DICOM. Wypełnianie pól różni się w zależności od formatu celowo, a nie z powodu pominięcia — PNG zawiera szerokość, wysokość, głębię bitów, and liczba klatek (choć FrameCount jest twardo zakodowane 1, nie jest rzeczywistym wykrywaniem klatek w animowanym PNG); JPEG i BMP zawierają wymiary i głębię bitów, ale nigdy nie liczbę klatek; WebP zawiera tylko wymiary; ICO’s FrameCount jest rzeczywistą liczbą rozmiarów osadzonych ikon w jego katalogu, i a 0 bajt w polu wymiaru wpisu katalogu ICO oznacza 256px, zgodnie ze specyfikacją formatu; TIFF-a FrameCount odzwierciedla ograniczony spacer po łańcuchu IFD-ów pliku, po jednym IFD na stronę.
Trzy z tych jedenaście — PSD, EMF/WMF i DICOM — nie mają innego darmowego, otwartoźródłowego detektora .NET, o którym byśmy wiedzieli, co stanowi realny powód istnienia tej biblioteki.
WMF i EMF: Dwa starsze formaty, dwa różne limity
Non-placeable WMF jest nadal poprawnie rozpoznawany jako ImageFormat.Wmf, ale tylko placeable WMF wypełnia wymiary — wyprowadzane z granic jednostek na cal w nagłówku przy użyciu zakodowanej na stałe konwersji 96 DPI, ponieważ WMF sam nie zawiera bezwzględnego rozmiaru w pikselach. EMF nie ma wcale wyraźnego pola szerokości/wysokości; jego wymiary pochodzą zamiast tego z prostokąta przestrzeni urządzenia rclBounds w nagłówku EMF. Oba są szczerze odzwierciedlone w ImageInfo: gdy wartość nie może być wyprowadzona, właściwość pozostaje null zamiast zgadywać.
Parsowanie nagłówka DICOM bez podglądu
ImageProbe odczytuje nagłówki DICOM w syntaksach transferu Implicit VR Little Endian oraz Explicit VR Little/Big Endian, wyodrębniając Rows do Height, Columns do Width oraz BitsAllocated do BitDepth — nie wymaga przeglądarki DICOM ani zewnętrznych zależności obrazowych. Parsowanie jest konserwatywne ze względu na projekt: element sekwencji o nieokreślonej długości przerywa przetwarzanie zamiast zgadywać jego zawartość, więc częściowo zrozumiany plik DICOM degraduje się do częściowego ImageInfo zamiast błędnego.
Nigdy nie zgłasza wyjątków przy nieprawidłowym lub uciętym wejściu
Probe jest przeznaczony dla niepewnych, częściowych lub w trakcie przesyłania plików. Jeśli plik pasuje do sygnatury formatu, ale jego nagłówek nie może być w pełni sparsowany — ucięte pobranie, uszkodzone przesłanie — wynik zawiera jedynie wykryty Format zamiast wyjątku.
byte[] truncated = fullFileBytes[..^3];
var info = ImageProbe.Probe(truncated);
// info.Format is still populated; other fields may be null
Szybki start
Zainstaluj pakiet, a następnie zbaduj plik z dysku, aby odczytać jego wykryty format, wymiary, głębię bitową i liczbę klatek w jednym wywołaniu, a potem wykonaj sprawdzenie tylko formatu przy użyciu surowych bajtów:
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);
Obsługiwane formaty
Aspose.Imaging FOSS dla .NET detects wszystkie 11 poniższych formatów i odczytuje metadane na poziomie nagłówka — nie dekoduje danych pikseli, więc nie ma możliwości „write”, którą można zgłosić. Wypełnienie pól różni się w zależności od formatu; zobacz szczegółowy podział w sekcji Kluczowe funkcje powyżej.
| Format | Rozszerzenie | Detected | Szerokość / Wysokość | Głębia bitowa | Liczba klatek |
|---|---|---|---|---|---|
| PNG | .png | ✓ | ✓ | ✓ | ✓ |
| JPEG | .jpg / .jpeg | ✓ | ✓ | ✓ | — |
| GIF | .gif | ✓ | ✓ | — | ✓ |
| BMP | .bmp | ✓ | ✓ | ✓ | — |
| WebP | .webp | ✓ | ✓ | — | — |
| ICO | .ico | ✓ | ✓ | ✓ | ✓ |
| TIFF | .tif / .tiff | ✓ | ✓ | ✓ | ✓ |
| PSD | .psd | ✓ | ✓ | ✓ | — |
| EMF | .emf | ✓ | ✓ (z zakresu) | — | — |
| WMF | .wmf | ✓ | ✓ (tylko umieszczalne, 96 DPI) | — | — |
| DICOM | .dcm | ✓ | ✓ (Wiersze/Kolumny) | ✓ (BitsAllocated) | — |
Open Source i Licencjonowanie
Aspose.Imaging FOSS dla .NET jest na licencji MIT bez zewnętrznych zależności. Licencja MIT pozwala na użycie zarówno w projektach open-source, jak i komercyjnych, bez opłat licencyjnych i ograniczeń w dystrybucji. Źródło jest dostępne pod adresem GitHub. Jest celowo ograniczone wyłącznie do wykrywania formatu — w celu dekodowania, edycji lub konwertowania tych formatów obrazu, zobacz Aspose.Imaging dla .NET — Enterprise Product.