Rdzeń API
Podstawowe API
Aspose.Imaging FOSS dla całej publicznej powierzchni .NET składa się z trzech klas: ImageProbe (statyczna fasada), ImageInfo (wartość wyniku), oraz ImageFormat (enum formatu). Ta strona opisuje, jak pasują razem jako kontrakt, poza przewodnikiem po poszczególnych funkcjach w Funkcje i możliwości.
Kontrakt trzech klas
ImageProbe— statyczny, bezstanowy. Każde wywołanie jest niezależne; nie ma nic do konfigurowania ani zwalniania.ImageInfo— zamknięty, niezmienny. Wszystkie pięć właściwości (Format,Width,Height,BitDepth,FrameCount).ImageFormat— wyliczenie z jedną wartością dla każdego rozpoznanego formatu, 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 itTworzenie ImageInfo bezpośrednio
Konstruktor ImageInfo jest publiczny — wymagany jest tylko format, wszystkie pozostałe parametry mają domyślną wartość null. Jest to przydatne w testach jednostkowych, które potrzebują zastępczego wyniku bez odczytywania rzeczywistego pliku:
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);Nie ma odpowiadającego sposobu na mutate an ImageInfo po konstrukcji — każda właściwość jest tylko do odczytu, więc zbadany lub skonstruowany obiekt jest bezpieczny do przekazywania i buforowania bez defensywnego kopiowania.
Wybór odpowiedniego przeciążenia
| Overload | Użyj, gdy |
|---|---|
ImageProbe.ProbeFile(path) | Masz ścieżkę do pliku i chcesz pełny ImageInfo |
ImageProbe.Probe(stream) | Masz już otwarty Stream (możliwy do przewijania lub nie) i chcesz pełny ImageInfo |
ImageProbe.Probe(data) | Masz już bajty w pamięci i chcesz pełny ImageInfo |
ImageProbe.DetectFormat(stream) / (data) | Wystarczy, że rozgałęzisz się na ImageFormat — pomiń parsowanie nagłówka poza sygnaturą formatu |
ProbeFile otwiera i odczytuje plik samodzielnie — nie ma potrzeby najpierw otwierać FileStream, aby tylko wywołać Probe(stream).
Masowe sondowanie katalogu
Ponieważ ImageProbe nigdy nie zgłasza wyjątku, skanowanie katalogu może wywoływać je w ciasnej pętli bez try/catch dla każdego pliku:
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żdy plik, którego nagłówek nie pasuje do jednego z 11 rozpoznanych formatów, zwraca ImageFormat.Unknown zamiast zgłaszać wyjątek — powyższa pętla nigdy nie potrzebuje bloku catch.
Umowa o braku wyjątków
To nie jest przypadkowe zachowanie — jest to zamierzona część umowy API. Jeśli nagłówek rozpoznanego formatu zostanie obcięty lub jest nieprawidłowy w trakcie parsowania, ImageProbe nadal zwraca ImageInfo z Format ustawionym na format, który udało się rozpoznać; nie propaguje wyjątku parsowania do wywołującego. Gwarantowane jest tylko Format — traktuj wszystkie pozostałe właściwości jako opcjonalne, niezależnie od wykrytego formatu.
Typowe problemy
| Problem | Przyczyna | Rozwiązanie |
|---|---|---|
Utworzony ImageInfo nie pasuje do rzeczywistego wyniku sondy | Ręcznie tworzone instancje nie weryfikują spójności między polami | Używaj ręcznej konstrukcji wyłącznie dla podwójek testowych, nie jako zamiennika badania rzeczywistych plików |
Wywoływanie Probe, gdy DetectFormat wystarczyłoby | Niepotrzebne parsowanie nagłówka, gdy potrzebny jest tylko format | Użyj DetectFormat, jeśli nigdy nie czytasz Width/Height/BitDepth/FrameCount |
Format Unknown dla pliku, który ma być obsługiwany | Nagłówek nie pasuje do żadnego z 11 rozpoznanych podpisów, albo plik jest zupełnie innym formatem | Potwierdź plik względem listy obsługiwanych formatów |
FAQ
Czy mogę dziedziczyć po ImageInfo lub ImageProbe?
Nie. ImageInfo jest sealed, a ImageProbe jest static — żaden z nich nie jest przeznaczony do dziedziczenia ani tworzenia instancji poprzez dziedziczenie.
Czy ImageProbe jest wątkowo-bezpieczny?
ImageProbe nie przechowuje mutowalnego stanu pomiędzy wywołaniami — każde wywołanie Probe, ProbeFile lub DetectFormat jest niezależne, co sprawia, że równoczesne wywołania z wielu wątków są bezpieczne.
Czy muszę coś zwalniać?
Nie. ImageProbe nie posiada własnych zasobów IDisposable. Jeśli przekażesz Stream, który sam otworzyłeś, pozostajesz odpowiedzialny za zwolnienie tego strumienia — Probe(stream) go nie zamyka.
API Reference Podsumowanie
| Klasa / Metoda | Opis |
|---|---|
ImageProbe.ProbeFile(path) | Sprawdź plik według ścieżki |
ImageProbe.Probe(stream) | Sprawdź Stream |
ImageProbe.Probe(data) | Sprawdź byte[] |
ImageProbe.DetectFormat(stream) | Tylko format, z Stream |
ImageProbe.DetectFormat(data) | Tylko format, z byte[] |
ImageInfo(format, width, height, bitDepth, frameCount) | Publiczny konstruktor — wymagany jest tylko format |
ImageInfo.Format / .Width / .Height / .BitDepth / .FrameCount | Właściwości wyniku tylko do odczytu |
ImageFormat | Enum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom |