Jellemzők és funkciók
Jellemzők és funkciók
Ez az oldal lefedi a Aspose.Imaging FOSS minden funkcióterületét a .NET formátumfelismeréshez és fejléc-ellenőrzés API számára, működő C# példákkal. A könyvtár soha nem dekódolja a képadatokat — minden metódus csak a fájlfejlécet olvassa.
Formátumfelismerés
ImageProbe a statikus belépési pont. Három túlterhelés fedi le a fájl útvonalát, egy adatfolyamot és egy nyers bájt tömböt:
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 parseHasználd a DetectFormat csak akkor, ha csak a formátum alapján kell elágazni; használd a Probe/ProbeFile is, ha méretekre, bitmélységre vagy képkockaszámra is szükséged van.
Fejléc metaadatok olvasása
ProbeFile/Probe egy ImageInfo objektumot ad vissza nullable Width, Height, BitDepth és FrameCount értékekkel — mindegyik csak akkor töltődik fel, ha a felismert formátum fejléce valóban tartalmazza azt az értéket:
var info = ImageProbe.ProbeFile("scan.dcm");
if (info.Width.HasValue && info.Height.HasValue)
{
Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}");
}Format (egy ImageFormat enum érték) mindig be van állítva, amint a fejléc felismerték — ez az egyetlen mező, amely garantáltan ki lesz töltve.
Formátumonkénti megjegyzések
Néhány formátumnak vannak fejléckülönbségei, amelyeket a ImageInfo normalizál vagy közvetlenül feltár:
| Formátum | Behavior |
|---|---|
| GIF | FrameCount tükrözi a képkockák számát, amikor a fájl több képkockát tartalmaz; ha a számot nem lehet meghatározni, kihagyja |
| BMP | A fejlécekben lévő negatív magasság (felső-alsó sorrend) normalizálva van — Height a pozitív nagyságot adja vissza |
| DICOM | A fejléc elemzése kezeli az Implicit VR Little Endian és az Explicit VR Little/Big Endian átvitel szintaxist, és kinyeri a sorok, oszlopok és a kiosztott bitek számát |
// 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");Támogatott formátumok
Az összes 11 formátumot ugyanúgy észlelik — a ImageProbe azonosítja a formátumot és olvassa a fejlécre vonatkozó metaadatokat; soha nem dekódolja vagy kódolja újra a pixeladatokat egyiknél sem. A mezők kitöltése valóban formátumonként eltér, bár — minden formátum beállítja a Format értéket, de csak néhány tartalmaz bitmélységet vagy képkockaszámot a fejlécekben:
| Formátum | Szélesség / Magasság | Bitmélység | Képkockaszám |
|---|---|---|---|
| PNG | ✓ | ✓ | ✓ |
| JPEG | ✓ | ✓ | — |
| GIF | ✓ | — | ✓ |
| BMP | ✓ | ✓ | — |
| WebP | ✓ | — | — |
| ICO | ✓ | ✓ | ✓ |
| TIFF | ✓ | ✓ | ✓ |
| PSD | ✓ | ✓ | — |
| EMF | ✓ (a határolókból) | — | — |
| WMF (helyezhető) | ✓ (96 DPI-t feltételez) | — | — |
| DICOM | ✓ (Sorok/Oszlopok) | ✓ (BitsAllocated) | — |
Az ismeretlen fejlécre ImageFormat.Unknown kerül, ahelyett, hogy kivételt dobna. Néhány figyelemre méltó mezőkitöltési részlet: a PNG FrameCount értéke mindig 1 (egy állandó, nem valódi animált PNG képkocka-észlelés); az ICO FrameCount valódi számlálója a beágyazott ikonméreteknek a könyvtárban, és egy 0 dimenziós bájt egy ICO könyvtárbejegyzésben 256px-et jelent a formátumspecifikáció szerint; a TIFF FrameCount egy korlátozott bejárást tükröz a fájl IFD láncában (minden IFD egy oldal); a nem helyezhető WMF továbbra is helyesen azonosítható ImageFormat.Wmf értékkel, de csak Format értéket ad vissza — a méretek csak a helyezhető WMF esetén töltődnek ki, egy keménykódolt 96DPI átalakítással a fejléc inch-per-unit határaiból; az EMF-nek egyáltalán nincs explicit szélesség/magasság mezője, ezért a méretei a rclBounds eszköz-térbeli téglalapból származnak.
Tervezés szerint ellenálló
ImageProbe soha nem dob kivételt rosszul formázott vagy csonkolt bemenet esetén. Ahelyett, hogy kivételt emelne, egy részleges ImageInfo értéket ad vissza — a Format akkor van beállítva, amikor a fejléc formátumjelzője felismerték, még akkor is, ha a fájl további része rövidre lett vágva vagy sérült:
byte[] truncated = fullFileBytes[..^3];
var info = ImageProbe.Probe(truncated);
// info.Format is still populated; other fields may be nullEz biztonságossá teszi, hogy megbízhatatlan, részleges vagy folyamatban lévő letöltések ellen futtassuk anélkül, hogy minden hívás köré try/catch-et kellene tenni.
Tippek és bevált gyakorlatok
- Használja a
DetectFormatértéket aProbehelyett, ha csak a formátumra van szükség, nem a méretekre. - Ellenőrizze a
Width/Height/BitDepth/FrameCountértékeketnullesetén, mielőtt használná őket — nem minden formátumhoz vannak kitöltve. - Előnyben részesítse a
Probe(stream)használatát a teljes fájl bájt tömbbe olvasása helyett nagy fájlok esetén. - A
ImageProbeteljesen statikus — nincs példány, nincsIDisposable, nincs konfigurációs objektum.
Gyakori problémák
| Hiba | Ok | Javítás |
|---|---|---|
Format van ImageFormat.Unknown | A fejléc nem egyezik a 11 felismert formátummal | Erősítse meg, hogy a fájl a PNG, JPEG, GIF, BMP, WebP, ICO, TIFF, PSD, EMF, WMF vagy DICOM formátumok egyike |
Width/Height null | A formátum fejlécében nem szerepel ez a mező, vagy a fejlécet levágták még ezelőtt | Ellenőrizze először a(z) Format értéket; nem minden mező van kitöltve minden formátumnál |
| A BMP magasság váratlanul pozitívnak tűnik | A forrásfájl negatív (fentről lefelé) magasságot használt a fejlécben | Elvárt — ImageInfo.Height mindig a pozitív nagyságra normalizálódik |
FAQ
A ImageProbe dekódolja a képpont adatokat?
Nem. Minden metódus csak a fájlfejlécet olvassa — a méreteket, a bitmélységet és a képkockák számát — soha nem a képpont tartalmat. A dekódolás és a renderelés e könyvtár hatáskörén kívül esik.
Mi történik, ha egy sérült vagy csonkolt fájlt vizsgálok?
ImageProbe soha nem dob hibát rosszul formázott vagy csonkolt bemenet esetén. Egy ImageInfo objektumot ad vissza a rendelkezésre álló fejlécbájtokból meghatározható mezőkkel — a Format akkor van beállítva, amikor a formátumjelzőt magát is felismerték.
Vizsgálhatok olyan adatfolyamot, amely nem kereshető?
Igen. A Probe(stream) elfogadja mind a kereshető, mind a nem kereshető adatfolyamokat.
API Reference Összegzés
| Osztály / Metódus | Leírás |
|---|---|
ImageProbe.ProbeFile(path) | Vizsgáld meg egy fájlt útvonal alapján, és egy ImageInfo-t ad vissza |
ImageProbe.Probe(stream) | Vizsgáld meg egy Stream-t (kereshető vagy nem) |
ImageProbe.Probe(data) | Vizsgáld meg egy nyers byte[]-t |
ImageProbe.DetectFormat(stream) | Csak a ImageFormat legyen visszaadva egy adatfolyam esetén |
ImageProbe.DetectFormat(data) | Csak a ImageFormat térjen vissza egy byte[] esetén |
ImageInfo | Eredmény típusa: Format, Width, Height, BitDepth, FrameCount |
ImageFormat | Enumeráció: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom |