Kern API
Kern-API
Aspose.Imaging FOSS für die gesamte öffentliche Oberfläche von .NET besteht aus drei Klassen: ImageProbe (die statische Fassade), ImageInfo (der Ergebniswert), und ImageFormat (das Format-Enum). Diese Seite erklärt, wie sie zusammen als Vertrag passen, über die Feature-für-Feature-Tour hinaus in Funktionen und Funktionalitäten.
Der Drei-Klassen-Vertrag
ImageProbe— statisch, zustandslos. Jeder Aufruf ist unabhängig; es gibt nichts zu konfigurieren oder zu entsorgen.ImageInfo— versiegelt, unveränderlich. Alle fünf Eigenschaften (Format,Width,Height,BitDepth,FrameCount) sind nach der Konstruktion schreibgeschützt.ImageFormat— ein Enum mit einem Wert pro erkanntem Format, 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 itDirektes Erzeugen von ImageInfo
Der Konstruktor von ImageInfo ist öffentlich — nur format ist erforderlich, jeder andere Parameter hat standardmäßig den Wert null. Das ist nützlich für Unit-Tests, die ein Ersatz-Ergebnis benötigen, ohne eine echte Datei zu untersuchen:
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);Es gibt keinen entsprechenden Weg, um mutate an ImageInfo nach der Konstruktion — jede Eigenschaft ist schreibgeschützt, sodass eine abgefragte oder konstruierte Instanz sicher weitergegeben und zwischengespeichert werden kann, ohne defensive Kopien zu erstellen.
Die richtige Überladung wählen
| Overload | Verwenden, wenn |
|---|---|
ImageProbe.ProbeFile(path) | Sie haben einen Dateipfad und möchten das vollständige ImageInfo |
ImageProbe.Probe(stream) | Sie haben bereits ein offenes Stream (suchbar oder nicht) und möchten das vollständige ImageInfo |
ImageProbe.Probe(data) | Sie haben die Bytes bereits im Speicher und möchten das vollständige ImageInfo |
ImageProbe.DetectFormat(stream) / (data) | Sie müssen nur nach ImageFormat verzweigen — überspringen Sie die Header-Analyse jenseits der Formatsignatur |
ProbeFile öffnet und liest die Datei selbst — es ist nicht nötig, zuerst ein FileStream zu öffnen, nur um Probe(stream) aufzurufen.
Batch-Abfrage eines Verzeichnisses
Da ImageProbe niemals eine Ausnahme wirft, kann ein Verzeichnis-Scan es in einer engen Schleife aufrufen, ohne für jede Datei try/catch zu verwenden:
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}");
}Jede Datei, deren Header nicht zu einem der 11 erkannten Formate passt, wird zu ImageFormat.Unknown aufgelöst, anstatt eine Ausnahme zu werfen — die obige Schleife benötigt niemals einen Catch-Block.
Der nie-auswerfende Vertrag
Dies ist kein zufälliges Verhalten — es ist ein bewusstes Element des API-Vertrags. Wenn der Header eines erkannten Formats während des Parsens abgeschnitten oder fehlerhaft ist, gibt ImageProbe immer noch ein ImageInfo zurück, bei dem Format auf das erkannte Format gesetzt ist; es propagiert keine Parse-Ausnahme an den Aufrufer. Nur Format ist garantiert — behandeln Sie jede andere Eigenschaft als optional, unabhängig davon, welches Format erkannt wurde.
Häufige Probleme
| Problem | Ursache | Lösung |
|---|---|---|
Das konstruierte ImageInfo stimmt nicht mit einem echten Probeergebnis überein | Manuell konstruierte Instanzen prüfen die Konsistenz zwischen Feldern nicht | Verwenden Sie manuelle Konstruktion nur für Test-Doubles, nicht als Ersatz für das Untersuchen realer Dateien |
Aufruf von Probe, wenn DetectFormat ausreichen würde | Unnötiges Header-Parsing, wenn nur das Format benötigt wird | Verwenden Sie DetectFormat, wenn Sie Width/Height/BitDepth/FrameCount nie lesen |
Unknown-Format für eine Datei, von der Sie erwarten, dass sie unterstützt wird | Header stimmt mit keiner der 11 erkannten Signaturen überein, oder die Datei ist ein völlig anderes Format | Bestätigen Sie die Datei gegenüber dem Liste unterstützter Formate |
FAQ
Kann ich ImageInfo oder ImageProbe unterklassen?
Nein. ImageInfo ist sealed und ImageProbe ist static — keiner ist für Unterklassenbildung oder Instanziierung via Vererbung vorgesehen.
Ist ImageProbe thread-sicher?
ImageProbe hält keinen veränderbaren Zustand zwischen Aufrufen — jeder Aufruf von Probe, ProbeFile oder DetectFormat ist unabhängig, sodass gleichzeitige Aufrufe aus mehreren Threads sicher sind.
Muss ich etwas freigeben?
Nein. ImageProbe hat keine eigenen IDisposable-Ressourcen. Wenn Sie ein Stream übergeben, das Sie selbst geöffnet haben, bleiben Sie für das Freigeben dieses Streams verantwortlich — Probe(stream) schließt ihn nicht.
API Reference Zusammenfassung
| Klasse / Methode | Beschreibung |
|---|---|
ImageProbe.ProbeFile(path) | Datei per Pfad prüfen |
ImageProbe.Probe(stream) | Ein Stream prüfen |
ImageProbe.Probe(data) | Ein byte[] prüfen |
ImageProbe.DetectFormat(stream) | Nur Format, von einem Stream |
ImageProbe.DetectFormat(data) | Nur Format, von einem byte[] |
ImageInfo(format, width, height, bitDepth, frameCount) | Öffentlicher Konstruktor — nur format ist erforderlich |
ImageInfo.Format / .Width / .Height / .BitDepth / .FrameCount | Schreibgeschützte Ergebnis-Eigenschaften |
ImageFormat | Enum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom |