Hogyan dolgozzunk a Aspose.Imaging FOSS Core API használatával a .NET-ban

Hogyan dolgozzunk a Aspose.Imaging FOSS Core API használatával a .NET-ban

Aspose.Imaging FOSS a .NET nyilvános felületéhez három osztályból áll: ImageProbe, ImageInfo és ImageFormat. Ez az útmutató bemutatja a csomag telepítését és a három osztály együttes használatát egy formátum felismeréséhez és a fejléc metaadatok olvasásához egy fájlból, egy adatfolyamból és egy bájt tömbből.

Lépésről-lépésre útmutató

1. lépés: A csomag telepítése

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

A csomag a net8.0 és netstandard2.0 platformokra céloz, és nullá külső futásidejű függőséggel rendelkezik.


2. lépés: A névtér importálása

Adj hozzá egyetlen using direktívát — ez feltárja a ImageProbe, ImageInfo és ImageFormat, valamint a teljes API felületet, így nincs több importálni való:

using Aspose.Imaging.Foss;

3. lépés: Fájl vizsgálata útvonal alapján

ImageProbe.ProbeFile csak annyi fájlfejlécet olvas be, hogy egy ImageInfo eredményt töltsön fel — soha nem dekódolja a pixel adatokat:

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

4. lépés: Stream vagy bájt tömb vizsgálata

Ha a kép már a memóriában van, vagy egy streamből (feltöltés, hálózati válasz) származik, használd azokat a túlterheléseket, amelyek közvetlenül elfogadják ezeket, ahelyett, hogy először egy ideiglenes fájlba írnád:

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) működik kereshető és nem kereshető streamekkel egyaránt.


5. lépés: Használd a DetectFormat csak akkor, ha csak a formátumra van szükséged

Ha csak a formátum alapján kell elágaznod, és nincs szükséged a méretre, bitmélységre vagy képkockaszámra, a DetectFormat kihagyja a fejléc további feldolgozását:

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

6. lépés: A null értékű ImageInfo mezők biztonságos olvasása

Width, Height, BitDepth és FrameCount nullable — csak akkor töltődnek fel, ha a felismert formátum fejléce ténylegesen tartalmazza azt az értéket. Format az az egyetlen mező, amely mindig beállítódik, miután a fejlécet felismerték:

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

Gyakori problémák és megoldások

A formátum így jelenik meg ImageFormat.Unknown. A fájl fejléce nem egyezik a 11 felismert formátummal (PNG, JPEG, GIF, BMP, WebP, ICO, TIFF, PSD, EMF, WMF, DICOM). Ellenőrizze, hogy a fájl valóban ezek közül valamelyik formátum — ImageProbe soha nem dob hibát ismeretlen fejléc esetén, hanem jelzi Unknown helyette.

Width/Height are null bár Format be van állítva. Nem minden formátum fejléce tartalmaz minden mezőt, és egy csonkolt fájl le is vághatja a mező bájtjait. Ellenőrizze Format először, majd a maradékot opcionálisnak tekintse.

Calling Probe when DetectFormat megtenné. Probe and ProbeFile feldolgozza a teljes fejlécet; DetectFormat csak annyit olvas, hogy azonosítsa a formátumot. Használja DetectFormat ha soha nem olvas Width/Height/BitDepth/FrameCount.

Dekódolt pixeladatokra számít. ImageProbe soha nem dekódolja, rendereli vagy konvertálja a kép tartalmát — csak a fejléc metaadatait olvassa. A dekódoláshoz és a pixel-szintű műveletekhez a kereskedelmi Aspose.Imaging SDK szükséges.

Gyakran Ismételt Kérdések

Mi történik, ha egy csonkolt vagy sérült fájlt vizsgálok?

ImageProbe soha nem dob kivételt rosszul formázott vagy csonkolt bemenetre. Egy részleges ImageInfo értéket ad vissza — Format be van állítva, amikor a fejléc formátumjelzője felismerték, még akkor is, ha a fájl többi része csonkolva van.

A(z) ImageProbe szálbiztos?

Igen. A(z) ImageProbe statikus, és nem tárol módosítható állapotot a hívások között, ezért a több szálból érkező egyidejű hívások biztonságosak.

Létrehozhatok egy ImageInfo-t közvetlenül, anélkül, hogy egy valódi fájlt vizsgálnék?

Igen. A(z) ImageInfo konstruktorja nyilvános, és csak a format szükséges — hasznos teszt duplikátumok létrehozásához: new ImageInfo(ImageFormat.Png, width: 64, height: 48).

Kell valamit felszabadítanom?

No. ImageProbe nem tartalmaz saját IDisposable erőforrásokat. Ha átadsz egy Stream-t, amelyet saját magad nyitottál meg, továbbra is felelős vagy annak feloldásáért.

Lásd még:

 Magyar