Hur man arbetar med Aspose.Imaging FOSS Core API i .NET

Hur man arbetar med Aspose.Imaging FOSS Core API i .NET

Aspose.Imaging FOSS för .NET s offentliga yta består av tre klasser: ImageProbe, ImageInfo, och ImageFormat. Denna guide går igenom installation av paketet och hur man använder alla tre tillsammans för att upptäcka ett format och läsa headermetadata från en fil, en ström och en bytearray.

Steg-för-steg guide

Steg 1: Installera paketet

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

Paketet riktar sig mot net8.0 och netstandard2.0 och har noll externa körningsberoenden.


Steg 2: Importera namnutrymmet

Lägg till en enda using-direktiv — den exponerar ImageProbe, ImageInfo och ImageFormat, hela API-ytan, så det finns inget annat att importera:

using Aspose.Imaging.Foss;

Steg 3: Undersök en fil via sökväg

ImageProbe.ProbeFile läser bara tillräckligt av filhuvudet för att fylla i ett ImageInfo-resultat — den avkodar aldrig pixeldata:

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

Steg 4: Undersök en ström eller byte-array

När bilden redan finns i minnet eller kom från en ström (en uppladdning, ett nätverkssvar), använd de överlagringar som accepterar dem direkt istället för att först skriva till en temporär fil:

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) fungerar med både sökbara och icke-sökbara strömmar.


Steg 5: Använd DetectFormat när du bara behöver formatet

Om du bara behöver grena baserat på formatet och inte behöver dimensioner, bitdjup eller ramantal, så hoppar DetectFormat över resten av huvudparsningen:

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

Steg 6: Läs de nullbara ImageInfo-fälten säkert

Width, Height, BitDepth och FrameCount är nullbara — de fylls i endast när det upptäckta formatets header faktiskt innehåller det värdet. Format är det enda fältet som alltid sätts när headern har identifierats:

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");
}

Vanliga problem och lösningar

Formatet visas som ImageFormat.Unknown. Filens header matchar inte något av de 11 igenkända formaten (PNG, JPEG, GIF, BMP, WebP, ICO, TIFF, PSD, EMF, WMF, DICOM). Bekräfta att filen verkligen är ett av dessa format — ImageProbe kastar aldrig ett undantag för ett okänt header, den rapporterar Unknown istället.

Width/Height are null även om Format är inställt. Inte alla formaters header innehåller varje fält, och en avkortad fil kan sluta innan ett fälts byte. Kontrollera Format först, behandla sedan resten som valfritt.

Calling Probe when DetectFormat skulle göra. Probe and ProbeFile tolka hela headern; DetectFormat läser bara tillräckligt för att identifiera formatet. Använd DetectFormat om du aldrig läser Width/Height/BitDepth/FrameCount.

Förväntar avkodad pixeldata. ImageProbe avkodar aldrig, renderar eller konverterar bildinnehåll — den läser bara headermetadata. Avkodning och pixelnivåoperationer kräver den kommersiella Aspose.Imaging SDK.

Vanliga frågor

Vad händer om jag undersöker en avkortad eller korrupt fil?

ImageProbe kastar aldrig ett undantag på felaktig eller avkortad inmatning. Den returnerar ett partiellt ImageInfo — Format sätts när headerns formatmarkör identifieras, även om resten av filen är avkortad.

Är ImageProbe trådsäker?

Ja. ImageProbe är statisk och har ingen muterbar tillstånd mellan anrop, så samtidiga anrop från flera trådar är säkra.

Kan jag konstruera en ImageInfo direkt, utan att undersöka en riktig fil?

Ja. ImageInfos konstruktor är publik och kräver endast format — användbart för att bygga testdubblar: new ImageInfo(ImageFormat.Png, width: 64, height: 48).

Behöver jag frigöra något?

Nej. ImageProbe innehåller inga IDisposable resurser av egen natur. Om du passerar en Stream som du själv öppnat, förblir du ansvarig för att avyttra den.

Se även

 Svenska