Bevezetés
Aspose.Imaging FOSS a .NET számára egy ingyenes, MIT licencű, nyílt forráskódú könyvtár a .NET fejlesztőknek, akiknek tudniuk kell, hogy egy képfájl is — annak formátuma, méretei, bitmélysége és keretszáma — anélkül, hogy a dekódolás költségét fizetnék. A statikus ImageProbe osztály a belépési pont: ProbeFile(path) lemezről olvas, Probe(stream) and Probe(data) elfogad egy adatfolyamot vagy bájt tömböt, és DetectFormat(stream) / DetectFormat(data) visszaadja a ImageFormat enum értéket anélkül, hogy teljes ImageInfo, azoknak a hívóknak, akiknek csak a formátum alapján kell elágazniuk. Minden probe metódus visszaad egy ImageInfo null értékkel rendelkező objektum Width, Height, BitDepth, és FrameCount tulajdonságok, csak akkor töltődnek fel, ha a detektált formátum fejléce ténylegesen tartalmazza az értéket.
Ez egy szándékosan szűk eszköz, és ez a lényeg. Nem dekódolja a pixeleket, nem renderel képeket, és nem konvertál formátumok között — ehhez a Aspose.Imaging a(z) .NET kereskedelmi terméke a megfelelő választás (az alábbiakban az Nyílt forráskód és licencelés szekcióban linkelve). Amit a Aspose.Imaging FOSS a(z) .NET számára tesz, az jóval kisebb, sokkal gyakrabban előforduló feladat: gyorsan és a lehető legbiztonságosabban megválaszolni, hogy „mi a formátuma, és mekkora?” olyan problémakörökben, ahol a teljes dekódolás felesleges munka: egy feltöltés ellenőrzése, egy bélyegkép elrendezésének méretezése, vegyes fájlok kötegének triage-olása, vagy DICOM fejlécmezők olvasása előfeldolgozási ellenőrzéshez.
A könyvtár MIT-licencű, nulláról származó külső függőséggel, és mind a netstandard2.0, mind a net8.0 célpontja — ingyenes mind nyílt forráskódú, mind kereskedelmi felhasználásra, jogdíj vagy terjesztési korlátozás nélkül.
Főbb jellemzők
Három mód a fájl vizsgálatára
A ImageProbe fájlútvonal, stream és bájt-tömb belépési pontokat kínál, így bárhol illeszkedik, ahol a képadatok már a folyamatában élnek — lemezen, már a memóriában, vagy a hálózaton keresztül érkeznek. A DetectFormat kihagyja egy teljes ImageInfo felépítését, ha csak a formátum alapján kell elágazni.
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
Strukturált, Őszinte Eredmények
ImageInfo feltárja a Format (egy ImageFormat enum érték, amely mindig beállításra kerül, amint a fejléc felismerték) együtt a nullable Width, Height, BitDepth és FrameCount mezőkkel. A “Nullable” itt valódi munkát végez: a mezőkitöltés ténylegesen formátumonként változik, és a ImageInfo soha nem állít elő olyan értéket, amelyet a formátum fejléce nem tartalmaz. A null ellenőrzése használat előtt a helyes minta, nem egy védelmi utángondolat.
var info = ImageProbe.ProbeFile("scan.dcm");
if (info.Width.HasValue && info.Height.HasValue)
{
Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}");
}
11 formátum, köztük három, amit a FOSS .NET tér egyébként nem észlel
PNG, JPEG, GIF, BMP, WebP (veszteséges, veszteségmentes és kiterjesztett), ICO, TIFF, PSD, EMF, WMF és DICOM. A mezők kitöltése szándékosan formátumonként eltér, nem hiány miatt — a PNG tartalmazza a szélességet, magasságot, bitmélységet, and keretszámot (bár FrameCount ez egy hardcoded 1, nem valós animált PNG keretdetektálás); FrameCount valódi számot jelent a beágyazott ikonméreteknek a könyvtárában, és egy 0 byte az ICO könyvtárbejegyzés dimenziómezőjében 256px-et jelent, a formátumspecifikáció szerint; a TIFF-nek FrameCount korlátozott bejárást tükröz a fájl IFD láncában, oldalanként egy IFD.
A tizenegy közül három — a PSD, a EMF/WMF és a DICOM — nem rendelkezik más, ingyenes, nyílt forráskódú .NET detektorral, amiről tudunk, ami valóban része annak, hogy miért létezik ez a könyvtár.
WMF és EMF: Két örökölt formátum, két különböző korlát
A nem helyezhető WMF-et továbbra is helyesen ImageFormat.Wmf-ként azonosítják, de csak a helyezhető WMF tölti ki a méreteket — a fejléc hüvelyke/inch határértékeiből származtatva egy hardkódolt 96 DPI átalakítással, mivel a WMF önmagában nem tartalmaz abszolút képpontméretet. Az EMF-nek egyáltalán nincs explicit szélesség/magasság mező; a méretei a rclBounds eszköz-tér négyszögből származnak az EMF fejlécben. Mindkettő őszintén megjelenik a ImageInfo-ben: amikor egy érték nem származtatható, a tulajdonság null marad, a találgatás helyett.
DICOM fejlécelemzés megjelenítő nélkül
ImageProbe DICOM fejléceket olvas az Implicit VR Little Endian és az Explicit VR Little/Big Endian átvitel szintaxisokban, kinyerve Rows a Height-be, Columns a Width-be, és BitsAllocated a BitDepth-be — DICOM néző vagy külső képfeldolgozó függőség nem szükséges. A feldolgozás tervezésénél konzervatív: egy meghatározatlan hosszúságú sorozatelem leállítja a bejárást a tartalmának kitalálása helyett, így egy részben megértett DICOM fájl részleges ImageInfo-re esik vissza, ahelyett, hogy hibás lenne.
Soha nem dob kivételt hibás vagy csonkolt bemenetre
Probe megbízhatatlan, részleges vagy úton lévő fájlokhoz készült. Ha egy fájl illeszkedik egy formátum aláírásához, de a fejléce nem olvasható teljesen – egy csonkolt letöltés, egy sérült feltöltés – az eredmény csak a felismert Format-t tartalmazza, ahelyett, hogy kivételt dobna.
byte[] truncated = fullFileBytes[..^3];
var info = ImageProbe.Probe(truncated);
// info.Format is still populated; other fields may be null
Gyors indítás
Telepítsd a csomagot, majd vizsgáld meg egy lemezről származó fájlt, hogy egy hívással kiolvassa a felismert formátumot, a méreteket, a bitmélységet és a képkockák számát, ezt követően formátum-csak ellenőrzést végez a nyers bájtokkal:
git clone https://github.com/aspose-imaging-foss/Aspose.Imaging-FOSS-for-.NET.git
cd Aspose.Imaging-FOSS-for-.NET
dotnet buildusing 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);
Támogatott formátumok
Aspose.Imaging FOSS a .NET számára detects az alábbi összes 11 formátumot, és fejlécszintű metaadatokat olvas — nem dekódolja a pixel adatokat, ezért nincs „write” képesség jelenteni. A mezőkitöltés formátumonként változik; lásd a fenti Főbb jellemzők részletes bontását.
| Formátum | Kiterjesztés | Detected | Szélesség / Magasság | Biteség | Képkockák száma |
|---|---|---|---|---|---|
| PNG | .png | ✓ | ✓ | ✓ | ✓ |
| JPEG | .jpg / .jpeg | ✓ | ✓ | ✓ | — |
| GIF | .gif | ✓ | ✓ | — | ✓ |
| BMP | .bmp | ✓ | ✓ | ✓ | — |
| WebP | .webp | ✓ | ✓ | — | — |
| ICO | .ico | ✓ | ✓ | ✓ | ✓ |
| TIFF | .tif / .tiff | ✓ | ✓ | ✓ | ✓ |
| PSD | .psd | ✓ | ✓ | ✓ | — |
| EMF | .emf | ✓ | ✓ (a határolásból) | — | — |
| WMF | .wmf | ✓ | ✓ (csak helyezhető, 96 DPI) | — | — |
| DICOM | .dcm | ✓ | ✓ (sorok/oszlopok) | ✓ (BitsAllocated) | — |
Nyílt forráskód és licencelés
Aspose.Imaging FOSS a .NET számára MIT-licenc alatt áll, nulla külső függőséggel. Az MIT licenc lehetővé teszi a használatot mind nyílt forráskódú, mind kereskedelmi projektekben, jogdíj vagy terjesztési korlátozás nélkül. A forrás elérhető itt: GitHub. Célja kizárólag a formátumfelismerés, ezért — dekódoláshoz, szerkesztéshez vagy ezeknek a képfájlformátumoknak a konvertálásához, lásd Aspose.Imaging a .NET – Enterprise Product esetén.