Introducere

Aspose.Imaging FOSS pentru .NET este o bibliotecă gratuită, licențiată MIT, open-source pentru dezvoltatori .NET care trebuie să știe ce este un fișier imagine is — formatul său, dimensiunile, adâncimea de biți și numărul de cadre — fără a plăti costul decodării acestuia. Clasa statică ImageProbe clasa este punctul de intrare: ProbeFile(path) citește de pe disc, Probe(stream) and Probe(data) acceptă un flux sau un tablou de octeți și DetectFormat(stream) / DetectFormat(data) returnează ImageFormat valoarea enum fără a construi un complet ImageInfo, pentru apelanții care au nevoie doar să aleagă în funcție de format. Fiecare metodă de sondare returnează un ImageInfo obiect cu nullable Width, Height, BitDepth, și FrameCount proprietăți, populate numai atunci când antetul formatului detectat conține efectiv acea valoare.

Acesta este un instrument deliberat restrâns, și acesta este scopul. Nu decodează pixeli, nu redă imagini și nu convertește între formate — pentru aceasta, produsul comercial Aspose.Imaging pentru .NET este alegerea potrivită (legat mai jos în secțiunea Open Source și Licențiere). Ceea ce Aspose.Imaging FOSS pentru .NET face este sarcina mult mai mică și mult mai comună de a răspunde la întrebarea “what format is this, and how big is it?” cât mai rapid și în siguranță, pentru tipul de problemă în care decodarea completă ar fi o muncă irosită: validarea unui încărcament, dimensionarea unui layout de miniaturi, trierea unui lot de fișiere mixte sau citirea câmpurilor de antet DICOM pentru o verificare pre-procesare.

Biblioteca este licențiată sub MIT, nu are dependențe externe și vizează atât netstandard2.0, cât și net8.0 — este gratuită atât pentru utilizare open-source, cât și comercială, fără redevențe sau restricții de redistribuire.


Funcționalități cheie

Trei moduri de a verifica un fișier

ImageProbe oferă puncte de intrare prin cale de fișier, flux și tablou de octeți, astfel încât să se potrivească oriunde datele imaginii există deja în fluxul tău — pe disc, deja în memorie sau sosind prin rețea. DetectFormat omite construirea unui ImageInfo complet când ai nevoie doar să alegi pe baza formatului.

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

Rezultate Structurate, Oneste

ImageInfo expune Format (o valoare enum ImageFormat, întotdeauna setată odată ce antetul este recunoscut) alături de Width, Height, BitDepth și FrameCount care pot fi nulabile. „Nullable” își face treaba reală aici: popularea câmpurilor variază cu adevărat în funcție de format, și ImageInfo nu fabrice niciodată o valoare pe care antetul unui format nu o conține. Verificarea null înainte de utilizare este modelul corect, nu o precauție defensivă ulterioară.

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

11 Formate, Incluzând Trei Ce Nu Sunt Detectate în Spațiul .NET FOSS

PNG, JPEG, GIF, BMP, WebP (lossy, lossless, and extended), ICO, TIFF, PSD, EMF, WMF și DICOM. Popularea câmpurilor diferă în funcție de format în mod deliberat, nu prin omisiune — PNG conține lățimea, înălțimea, adâncimea de biți, and număr de cadre (deși FrameCount este un hardcoded 1, nu o detectare reală a cadrelor animated-PNG); FrameCount este un număr autentic al dimensiunilor pictogramelor încorporate în directorul său, și un 0 byte în câmpul de dimensiune al unei intrări din directorul ICO înseamnă 256px, conform specificației formatului; TIFF’s FrameCount reflectă o traversare limitată a lanțului IFD al fișierului, câte un IFD pe pagină.

Trei dintre aceste unsprezece — PSD, EMF/WMF și DICOM — nu au niciun alt detector .NET gratuit, open-source de care să fim conștienți, ceea ce reprezintă un motiv real pentru existența acestei biblioteci.

WMF și EMF: Două Formate Moștenite, Două Limite Diferite

WMF ne-plasabil este încă identificat corect ca ImageFormat.Wmf, dar numai WMF-ul plasabil populează dimensiunile — derivate din limitele unităţi-pe-inch ale antetului printr-o conversie hardcodată de 96 DPI, deoarece WMF însuși nu conține nicio dimensiune absolută de pixel. EMF nu are deloc un câmp explicit de lățime/înălțime; dimensiunile sale provin din dreptunghiul rclBounds în spațiul dispozitivului din antetul EMF. Ambele sunt reflectate cu sinceritate în ImageInfo: când o valoare nu poate fi derivată, proprietatea rămâne null în loc să se ghicească.

Analiză a Antetului DICOM Fără un Vizualizator

ImageProbe citește antetele DICOM în sintaxele de transfer Implicit VR Little Endian și Explicit VR Little/Big Endian, extrăgând Rows în Height, Columns în Width și BitsAllocated în BitDepth — nu este necesar niciun vizualizator DICOM sau dependență externă de imagistică. Analiza este conservatoare prin design: un element de secvență cu lungime nedefinită oprește parcurgerea în loc să ghicească conținutul, astfel încât un fișier DICOM înțeles parțial se degradează la un ImageInfo parțial în loc de unul incorect.

Nu aruncă niciodată la intrări malformate sau trunchiate

Probe este conceput pentru fișiere neîncredere, parțiale sau în curs de transfer. Dacă un fișier se potrivește semnăturii unui format, dar antetul său nu poate fi analizat complet — un download trunchiat, un upload corupt — rezultatul conține doar Format detectat, în loc de o excepție.

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

Start rapid

Instalați pachetul, apoi interogați un fișier de pe disc pentru a citi formatul detectat, dimensiunile, adâncimea de biți și numărul de cadre într-un singur apel, urmat de o verificare doar a formatului utilizând octeții brute:

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

Formate suportate

Aspose.Imaging FOSS pentru .NET detects toate cele 11 formate de mai jos și citește metadatele la nivel de antet — nu decodează datele de pixeli, astfel încât nu există capacitatea de “write” de raportat. Popularea câmpurilor variază în funcție de format; consultați defalcarea detaliată din Funcționalități cheie de mai sus.

FormatExtensieDetectedLățime / ÎnălțimeAdâncime de bițiNumăr de cadre
PNG.png✓✓✓✓
JPEG.jpg / .jpeg✓✓✓—
GIF.gif✓✓—✓
BMP.bmp✓✓✓—
WebP.webp✓✓——
ICO.ico✓✓✓✓
TIFF.tif / .tiff✓✓✓✓
PSD.psd✓✓✓—
EMF.emf✓✓ (din limite)——
WMF.wmf✓✓ (doar inserabil, 96 DPI)——
DICOM.dcm✓✓ (Rânduri/Coloane)✓ (BitsAllocated)—

Open Source și Licențiere

Aspose.Imaging FOSS pentru .NET este licențiat sub MIT, fără dependențe externe. Licența MIT permite utilizarea atât în proiecte open-source, cât și comerciale, fără redevențe sau restricții privind redistribuirea. Codul sursă este disponibil pe GitHub. Este intenționat limitat la detectarea formatului — pentru decodare, editare sau conversie a acestor formate de imagine, consultați Aspose.Imaging pentru .NET — Produs Enterprise.


Începeți

Resurse conexe