Introduktion

Aspose.Imaging FOSS för .NET är ett fritt, MIT-licensed, open-source-bibliotek för .NET-utvecklare som behöver veta vad en bildfil is — dess format, dimensioner, bitdjup och bildramsantal — utan att betala kostnaden för att avkoda den. Den static ImageProbe klass är inträdespunkten: ProbeFile(path) läser från disk, Probe(stream) and Probe(data) accepterar en ström eller byte array, och DetectFormat(stream) / DetectFormat(data) returnerar ImageFormat enum-värde utan att bygga en full ImageInfo, för anropare som bara behöver grena på formatet. Varje probe-metod returnerar en ImageInfo objekt med nullable Width, Height, BitDepth, och FrameCount egenskaper, fylls i endast när det upptäckta formatets header faktiskt har det värdet.

Detta är ett avsiktligt begränsat verktyg, och det är poängen. Det avkodar inte pixlar, renderar inte bilder eller konverterar mellan format — för det är den kommersiella Aspose.Imaging för .NET-produkten det rätta valet (länkad nedan under Öppen källkod & licensiering). Vad Aspose.Imaging FOSS för .NET gör är den mycket mindre, mycket vanligare uppgiften att besvara “vilket format är detta, och hur stort är det?” så snabbt och säkert som möjligt, för den typ av problem där full avkodning skulle vara slöseri med arbete: validera en uppladdning, bestämma storlek på en miniatyrlayout, triagera en batch av blandade filer, eller läsa DICOM-headerfält för en förbehandlingskontroll.

Biblioteket är MIT-licensierat utan externa beroenden och riktar sig mot både netstandard2.0 och net8.0 — gratis för både öppen källkod och kommersiell användning, utan royalties eller restriktioner för vidaredistribution.


Viktiga funktioner

Tre sätt att undersöka en fil

ImageProbe erbjuder filväg-, ström- och byte-array-inträdespunkter, så det passar var som helst där bilddata redan finns i din pipeline — på disk, redan i minnet eller ankommer över nätet. DetectFormat hoppar över att bygga en full ImageInfo när du bara behöver göra ett formatbaserat grenval.

using Aspose.Imaging.Foss;

var fromPath   = ImageProbe.ProbeFile("photo.jpg");
var fromBytes  = ImageProbe.Probe(byteArray);
var fromStream = ImageProbe.Probe(stream);

var formatOnly = ImageProbe.DetectFormat(byteArray); // ImageFormat only, no header parse

Strukturerade, ärliga resultat

ImageInfo exponerar Format (ett ImageFormat enum-värde, alltid satt när huvuddelen känns igen) tillsammans med nullable Width, Height, BitDepth och FrameCount. “Nullable” gör det verkliga arbetet här: fältfyllning varierar faktiskt efter format, och ImageInfo fabricerar aldrig ett värde som ett formats huvuddel inte innehåller. Att kontrollera null innan användning är det korrekta mönstret, inte en defensiv eftertanke.

var info = ImageProbe.ProbeFile("scan.dcm");
if (info.Width.HasValue && info.Height.HasValue)
{
    Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}");
}

11 format, inklusive tre som inget annat i FOSS .NET Space upptäcker

PNG, JPEG, GIF, BMP, WebP (lossy, lossless, och extended), ICO, TIFF, PSD, EMF, WMF och DICOM. Fältfyllning skiljer sig efter format avsiktligt, inte på grund av utelämnande — PNG innehåller bredd, höjd, bitdjup, and ramantal (trots FrameCount är en hårdkodad 1, inte verklig animated-PNG-ramdetektering); FrameCount är ett äkta antal av de inbäddade ikonstorlekarna i dess katalog, och en 0 byte i en ICO-katalogposts dimensionsfält betyder 256px, enligt formatets specifikation; TIFF:s FrameCount återspeglar en begränsad traversering av filens IFD-kedja, en IFD per sida.

Tre av dessa elva — PSD, EMF/WMF och DICOM — har ingen annan fri, öppen källkod .NET-detektor som vi känner till, vilket är en verklig del av varför detta bibliotek finns.

WMF och EMF: två äldre format, två olika gränser

Ej placerbar WMF identifieras fortfarande korrekt som ImageFormat.Wmf, men endast placerbar WMF fyller i dimensioner — härledda från huvuddelens enheter-per-tum-gränser via en hårdkodad 96DPI-omvandling, eftersom WMF själv inte har någon absolut pixelförstorlek. EMF har inget explicit bredd-/höjdfält alls; dess dimensioner kommer istället från rclBounds-rektangeln i enhetsrummet i EMF-huvudet. Båda återspeglas ärligt i ImageInfo: när ett värde inte kan härledas, förblir egenskapen null snarare än att gissa.

DICOM-huvudparsning utan en visare

ImageProbe läser DICOM-huvuden över Implicit VR Little Endian och Explicit VR Little/Big Endian överföringssyntaxer, extraherar Rows till Height, Columns till Width och BitsAllocated till BitDepth — ingen DICOM-visare eller extern bildbehandlingsberoende krävs. Parsning är konservativ av design: ett sekvenselement utan definierad längd stoppar genomsökningen istället för att gissa innehållet, så en delvis förstådd DICOM-fil degraderas till en partiell ImageInfo istället för en felaktig.

Kastar aldrig undantag vid felaktig eller trunkerad inmatning

Probe är byggt för opålitliga, partiella eller pågående filer. Om en fil matchar ett formats signatur men dess huvud inte kan parsas helt — en trunkerad nedladdning, en korrumperad uppladdning — innehåller resultatet bara den upptäckta Format istället för ett undantag.

byte[] truncated = fullFileBytes[..^3];
var info = ImageProbe.Probe(truncated);
// info.Format is still populated; other fields may be null

Snabbstart

Installera paketet, och provkör sedan en fil från disk för att läsa dess upptäckta format, dimensioner, bitdjup och ramantal i ett enda anrop, följt av en kontroll enbart av formatet med de råa byten:

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

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

// Format-only detection when dimensions aren't needed
var bytes = File.ReadAllBytes("photo.jpg");
var format = ImageProbe.DetectFormat(bytes);

Stödda format

Aspose.Imaging FOSS för .NET detects alla 11 formaten nedan och läser metadata på rubriknivå — den avkodar inte pixeldatat, så det finns ingen “write”-kapacitet att rapportera. Fältpopulation varierar per format; se den detaljerade uppdelningen i Viktiga funktioner ovan.

FormatFiländelseDetectedBredd / HöjdBitdjupAntal bildrutor
PNG.png✓✓✓✓
JPEG.jpg / .jpeg✓✓✓—
GIF.gif✓✓—✓
BMP.bmp✓✓✓—
WebP.webp✓✓——
ICO.ico✓✓✓✓
TIFF.tif / .tiff✓✓✓✓
PSD.psd✓✓✓—
EMF.emf✓✓ (från gränser)——
WMF.wmf✓✓ (endast placerbar, 96 DPI)——
DICOM.dcm✓✓ (Rader/Kolumner)✓ (BitsAllocated)—

Öppen källkod & licensiering

Aspose.Imaging FOSS för .NET är MIT-licensierad utan externa beroenden. MIT-licensiering tillåter användning i både öppen källkod och kommersiella projekt utan royalties eller begränsningar för vidaredistribution. Källkoden finns tillgänglig på GitHub. Den är avsiktligt begränsad till formatdetektering endast — för avkodning, redigering eller konvertering av dessa bildformat, se Aspose.Imaging för .NET — Enterprise Product.


Kom igång

Relaterade resurser