Cum să lucrați cu Aspose.Imaging FOSS Core API în .NET

Cum să lucrați cu Aspose.Imaging FOSS Core API în .NET

Aspose.Imaging FOSS pentru suprafaţa publică a .NET este compus din trei clase: ImageProbe, ImageInfo și ImageFormat. Acest ghid parcurge instalarea pachetului și utilizarea tuturor celor trei împreună pentru a detecta un format și a citi metadatele de antet dintr-un fișier, un flux și un tablou de octeţi.

Ghid pas cu pas

Pasul 1: Instalaţi pachetul

git clone https://github.com/aspose-imaging-foss/Aspose.Imaging-FOSS-for-.NET.git
cd Aspose.Imaging-FOSS-for-.NET
dotnet build

Pachetul vizează net8.0 și netstandard2.0 și nu are dependenţe externe la rulare.


Pasul 2: Importaţi spaţiul de nume

Adăugați o singură directivă using — aceasta expune ImageProbe, ImageInfo și ImageFormat, întreaga suprafață API, astfel încât nu mai este nimic de importat:

using Aspose.Imaging.Foss;

Pasul 3: Interogați un fișier după cale

ImageProbe.ProbeFile citește suficient din antetul fișierului pentru a completa un rezultat ImageInfo — nu decodează niciodată datele de pixeli:

var info = ImageProbe.ProbeFile("photo.jpg");
Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}, {info.BitDepth}-bit");

Pasul 4: Interogați un flux sau un tablou de octeți

Când imaginea este deja în memorie sau provine dintr-un flux (un încărcare, un răspuns de rețea), utilizați suprasarcinile care le acceptă direct în loc să scrieți mai întâi într-un fișier temporar:

byte[] bytes = File.ReadAllBytes("photo.jpg");
var infoFromBytes = ImageProbe.Probe(bytes);

using var stream = File.OpenRead("photo.jpg");
var infoFromStream = ImageProbe.Probe(stream);

Probe(stream) funcționează cu fluxuri seekable și non-seekable.


Pasul 5: Utilizați DetectFormat când aveți nevoie doar de format

Dacă aveți nevoie doar să diferențiați în funcție de format și nu aveți nevoie de dimensiuni, adâncime de biți sau număr de cadre, DetectFormat omite restul analizei antetului:

var format = ImageProbe.DetectFormat(bytes);
if (format == ImageFormat.Dicom)
{
    // route to DICOM-specific handling
}

Pasul 6: Citește în siguranță câmpurile ImageInfo anulabile

Width, Height, BitDepth și FrameCount pot fi nule — sunt completate doar când antetul formatului detectat conține efectiv acea valoare. Format este singurul câmp setat întotdeauna odată ce antetul este recunoscut:

var info = ImageProbe.ProbeFile("scan.dcm");
if (info.Width.HasValue && info.Height.HasValue)
{
    Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}");
}
else
{
    Console.WriteLine($"{info.Format}: dimensions not available in this header");
}

Probleme comune și soluții

Formatul se afișează ca ImageFormat.Unknown. Antetul fișierului nu corespunde niciunuia dintre cele 11 formate recunoscute (PNG, JPEG, GIF, BMP, WebP, ICO, TIFF, PSD, EMF, WMF, DICOM). Confirmați că fișierul este într-adevăr unul dintre acele formate — ImageProbe nu aruncă niciodată o eroare pentru un antet nerecunoscut, raportează Unknown în schimb.

Width/Height are null chiar dacă Format este setat. Nu fiecare antet de format conține toate câmpurile, iar un fișier trunchiat poate fi tăiat înainte de octeții unui câmp. Verificați Format mai întâi, apoi tratați restul ca opțional.

Calling Probe when DetectFormat ar face. Probe and ProbeFile analizează antetul complet; DetectFormat citește doar suficient pentru a identifica formatul. Folosește DetectFormat dacă nu citești niciodată Width/Height/BitDepth/FrameCount.

Se așteaptă datele de pixeli decodificate. ImageProbe nu decodifică, nu redă și nu convertește conținutul imaginii — citește doar metadatele antetului. Decodificarea și operațiunile la nivel de pixel necesită SDK-ul comercial Aspose.Imaging.

Întrebări frecvente

Ce se întâmplă dacă probez un fișier trunchiat sau corupt?

ImageProbe nu aruncă niciodată pe intrări malformate sau trunchiate. Returnează un ImageInfo parțial — Format este setat ori de câte ori markerul de format al antetului a fost recunoscut, chiar dacă restul fișierului este tăiat.

Este ImageProbe sigur pentru fire de execuție?

Da. ImageProbe este static și nu deține stare mutabilă între apeluri, astfel încât apelurile concurente din mai multe fire de execuție sunt sigure.

Pot construi un ImageInfo direct, fără a proba un fișier real?

Da. Constructorul lui ImageInfo este public și necesită doar format — util pentru construirea dublurilor de test: new ImageInfo(ImageFormat.Png, width: 64, height: 48).

Trebuie să eliberez ceva?

Nr. ImageProbe nu deține resurse IDisposable proprii. Dacă transmiți un Stream pe care l-ai deschis tu, rămâi responsabil pentru eliberarea lui.

Vezi și:

 Română