Caracteristici și funcționalități

Caracteristici și funcționalități

Caracteristici și funcționalități

Această pagină acoperă fiecare domeniu de funcționalitate al Aspose.Imaging FOSS pentru detectarea formatului .NET și sonorizarea antetului API, cu exemple C# funcționale. Biblioteca nu decodează niciodată datele pixel — fiecare metodă citește doar antetul fișierului.


Detectarea formatului

ImageProbe este punctul de intrare static. Trei suprasarcini acoperă o cale de fișier, un flux și un tablou brut de octeți:

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

Folosește DetectFormat când ai nevoie doar să alegi în funcție de format; folosește Probe/ProbeFile când ai nevoie și de dimensiuni, adâncime de biți sau număr de cadre.


Citirea metadatelor antetului

ProbeFile/Probe returnă un ImageInfo cu nullable Width, Height, BitDepth și FrameCount — fiecare completat doar când antetul formatului detectat conține efectiv acea valoare:

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

Format (o valoare enum ImageFormat) este întotdeauna setată odată ce antetul este recunoscut — este singurul câmp garantat să fie populat.


Note pe format

Câteva formate au particularități ale antetului pe care ImageInfo le normalizează sau le expune direct:

FormatBehavior
GIFFrameCount reflectă numărul de cadre când fișierul conține mai multe cadre; este omis dacă numărul nu poate fi determinat
BMPO înălțime negativă în antet (ordine de rânduri de sus în jos) este normalizată — Height returnează magnitudinea pozitivă
DICOMAnaliza antetului gestionează sintaxele de transfer Implicit VR Little Endian și Explicit VR Little/Big Endian, extrăgând rândurile, coloanele și biții alocați
// DICOM: rows -> Height, columns -> Width, bitsAllocated -> BitDepth,
// across any of the three common transfer syntaxes
var dicomInfo = ImageProbe.Probe(dicomBytes);
Console.WriteLine($"{dicomInfo.Width}x{dicomInfo.Height}, {dicomInfo.BitDepth}-bit");

Formate suportate

Toate cele 11 formate sunt detectate în același mod — ImageProbe identifică formatul și citește metadatele antetului; nu decodează niciodată și nu recodifică datele pixel pentru niciunul dintre ele. Popularea câmpurilor variază cu adevărat în funcție de format — fiecare format setează Format, dar doar unele includ adâncimea de biți sau numărul de cadre în antetul lor:

FormatLățime / ÎnălțimeAdâncime de bițiNumăr de cadre
PNG✓✓✓
JPEG✓✓—
GIF✓—✓
BMP✓✓—
WebP✓——
ICO✓✓✓
TIFF✓✓✓
PSD✓✓—
EMF✓ (din limite)——
WMF (de plasat)✓ (presupune 96 DPI)——
DICOM✓ (Rânduri/Coloane)✓ (BitsAllocated)—

Un antet nerecunoscut se rezolvă la ImageFormat.Unknown în loc să arunce o excepție. Câteva detalii notabile privind popularea câmpurilor: FrameCount al PNG este întotdeauna 1 (o constantă, nu o detectare reală de cadre PNG animate); FrameCount al ICO este un număr real al dimensiunilor pictogramelor încorporate în director, și un octet de dimensiune 0 într-o intrare de director ICO înseamnă 256px conform specificației formatului; FrameCount al TIFF reflectă o parcurgere limitată a lanțului IFD al fișierului (fiecare IFD reprezintă o pagină); WMF ne-placeable este tot identificat corect ca ImageFormat.Wmf, dar returnează numai Format — dimensiunile sunt populate doar pentru WMF placeable, printr-o conversie hardcodată de 96 DPI din limitele unităților-pe-inches ale antetului; EMF nu are deloc câmp explicit de lățime/înălțime, astfel încât dimensiunile sale sunt deduse din dreptunghiul spațiului dispozitiv rclBounds.


Rezistent prin proiectare

ImageProbe nu aruncă niciodată pe intrări malformate sau trunchiate. În loc să ridice o excepție, returnează un ImageInfo parțial — Format este setat ori de câte ori markerul de format al antetului a fost recunoscut, chiar și atunci când restul fișierului este tăiat sau corupt:

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

Acest lucru îl face sigur de rulat împotriva descărcărilor neîncrezătoare, parțiale sau în curs, fără a avea nevoie de un try/catch la fiecare apel.


Sfaturi și cele mai bune practici

  • Utilizați DetectFormat în loc de Probe când aveți nevoie doar de format, nu de dimensiuni
  • Verificați Width/Height/BitDepth/FrameCount pentru null înainte de a le folosi — nu sunt completate pentru fiecare format
  • Preferați Probe(stream) în locul citirii unui fișier întreg într-un tablou de octeți mai întâi când lucrați cu fișiere mari
  • ImageProbe este complet static — nu există instanță, nu IDisposable, nici obiect de configurare

Probleme comune

ProblemăCauzăRemediere
Format este ImageFormat.UnknownAntetul nu corespunde niciunuia dintre cele 11 formate recunoscuteConfirmați că fișierul este unul dintre PNG, JPEG, GIF, BMP, WebP, ICO, TIFF, PSD, EMF, WMF sau DICOM
Width/Height sunt nullAntetul formatului nu conține acel câmp, sau antetul a fost trunchiat înainte de acel câmpVerificați mai întâi Format; nu toate câmpurile sunt completate pentru fiecare format
Înălțimea BMP pare neașteptat pozitivăFișierul sursă a utilizat o înălțime negativă (de sus în jos) în antetul săuSe așteaptă — ImageInfo.Height se normalizează întotdeauna la magnitudinea pozitivă

FAQ

Decodează ImageProbe datele de pixeli?

Nu. Fiecare metodă citește doar antetul fișierului — dimensiunile, adâncimea de biți și numărul de cadre — niciodată conținutul pixelilor. Decodarea și redarea sunt în afara domeniului acestei biblioteci.

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

ImageProbe nu aruncă niciodată excepții pentru intrări malformate sau trunchiate. Returnează un ImageInfo cu orice câmpuri a putut determina din octeții de antet disponibili — Format este setat ori de câte ori markerul de format a fost recunoscut.

Pot să sondez un flux care nu este seekable?

Da. Probe(stream) acceptă atât fluxuri seekable, cât și fluxuri non-seekable.


API Reference Rezumat

Clasă / MetodăDescriere:
ImageProbe.ProbeFile(path)Probează un fișier prin cale, returnând un ImageInfo
ImageProbe.Probe(stream)Probează un Stream (seekable sau nu)
ImageProbe.Probe(data)Probează un byte[] brut
ImageProbe.DetectFormat(stream)Returnează doar ImageFormat pentru un flux
ImageProbe.DetectFormat(data)Returnează doar ImageFormat pentru un byte[]
ImageInfoTip rezultat: Format, Width, Height, BitDepth, FrameCount
ImageFormatEnum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom

Vezi și:

 Română