Nucleu API
API de bază
Aspose.Imaging FOSS pentru suprafața publică completă a .NET este trei clase: ImageProbe (fațada statică), ImageInfo (valoarea rezultatului), și ImageFormat (enumul de format). Această pagină acoperă cum se potrivesc împreună ca un contract, dincolo de turul pe funcționalități în Funcționalități și Caracteristici.
Contractul de trei clase
ImageProbe— static, fără stare. Fiecare apel este independent; nu există nimic de configurat sau de eliberat.ImageInfo— sigilat, imuabil. Toate cele cinci proprietăți (Format,Width,Height,BitDepth,FrameCount).ImageFormat— un enum cu o valoare pentru fiecare format recunoscut, 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 itConstruirea directă a ImageInfo
Constructorul lui ImageInfo este public — doar format este necesar, toate celelalte parametre au implicit valoarea null. Acest lucru este util pentru testele unitare care au nevoie de un rezultat simulativ fără a interoga un fișier real:
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);Nu există nicio modalitate corespunzătoare de a mutate an ImageInfo după construcție — fiecare proprietate este doar de tip get, deci o instanță interogată sau construită poate fi transmisă și memorată în siguranță fără copiere defensivă.
Alegerea suprasarcinii potrivite
| Overload | Folosiți când |
|---|---|
ImageProbe.ProbeFile(path) | Aveți o cale de fișier și doriți ImageInfo complet |
ImageProbe.Probe(stream) | Aveți deja un Stream deschis (seekable sau nu) și doriți ImageInfo complet |
ImageProbe.Probe(data) | Aveți deja octeții în memorie și doriți ImageInfo complet |
ImageProbe.DetectFormat(stream) / (data) | Trebuie să ramificați doar pe ImageFormat — săriți analiza antetului dincolo de semnătura formatului |
ProbeFile deschide și citește fișierul în sine — nu este nevoie să se deschidă mai întâi un FileStream doar pentru a apela Probe(stream).
Interogare în lot a unui director
Deoarece ImageProbe nu aruncă niciodată, o scanare a directorului îl poate apela într-o buclă strânsă fără try/catch per fișier:
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}");
}Orice fișier al cărui antet nu corespunde niciunuia dintre cele 11 formate recunoscute se rezolvă în ImageFormat.Unknown în loc să arunce — bucla de mai sus nu are niciodată nevoie de un bloc catch.
Contractul care nu aruncă niciodată
Acesta nu este un comportament incidental — este o parte deliberată a contractului API. Dacă antetul unui format recunoscut este trunchiat sau malformat în timpul parsării, ImageProbe tot returnează un ImageInfo cu Format setat la formatul pe care l-a recunoscut; nu propagă o excepție de parsare către apelant. Doar Format este garantat — tratează toate celelalte proprietăți ca opționale, indiferent de formatul detectat.
Probleme comune
| Problemă | Cauză | Remediere |
|---|---|---|
Construit ImageInfo nu corespunde unui rezultat real de sondare | Instanțele create manual nu validează consistența dintre câmpuri | Folosește construcția manuală doar pentru dubluri de test, nu ca înlocuitor pentru sondarea fișierelor reale |
Apelarea Probe când DetectFormat ar fi suficient | Analiză inutilă a antetului când este necesar doar formatul | Folosește DetectFormat dacă nu citești niciodată Width/Height/BitDepth/FrameCount |
Format Unknown pentru un fișier pe care te aștepți să fie suportat | Antetul nu se potrivește cu niciuna dintre cele 11 semnături recunoscute, sau fișierul este într-un format complet diferit | Confirmă fișierul față de lista formatelor suportate |
FAQ
Pot să subclasific ImageInfo sau ImageProbe?
Nu. ImageInfo este sealed și ImageProbe este static — niciunul nu este conceput pentru subclasare sau instanțiere prin moștenire.
Este ImageProbe sigur pentru fire de execuție?
ImageProbe nu păstrează niciun stare mutabilă între apeluri — fiecare apel la Probe, ProbeFile sau DetectFormat este independent, făcând apelurile concurente din mai multe fire de execuție sigure.
Trebuie să eliberez ceva?
Nu. ImageProbe nu are resurse IDisposable proprii. Dacă transmiteţi un Stream pe care l-aţi deschis dvs., rămâneţi responsabil pentru eliberarea acelui flux — Probe(stream) nu îl închide.
API Reference Rezumat
| Clasă / Metodă | Descriere: |
|---|---|
ImageProbe.ProbeFile(path) | Probează un fișier prin cale |
ImageProbe.Probe(stream) | Probează un Stream |
ImageProbe.Probe(data) | Probează un byte[] |
ImageProbe.DetectFormat(stream) | Doar format, de la un Stream |
ImageProbe.DetectFormat(data) | Doar format, de la un byte[] |
ImageInfo(format, width, height, bitDepth, frameCount) | Constructor public — doar format este necesar |
ImageInfo.Format / .Width / .Height / .BitDepth / .FrameCount | Proprietăți de rezultat numai în citire |
ImageFormat | Enum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom |