Comment travailler avec le Aspose.Imaging FOSS Core API dans .NET
Aspose.Imaging FOSS pour la surface publique de .NET est composé de trois classes : ImageProbe, ImageInfo et ImageFormat. Ce guide montre comment installer le paquet et utiliser les trois ensemble pour détecter un format et lire les métadonnées d’en-tête depuis un fichier, un flux et un tableau d’octets.
Guide étape par étape
Étape 1: installer le paquet
git clone https://github.com/aspose-imaging-foss/Aspose.Imaging-FOSS-for-.NET.git
cd Aspose.Imaging-FOSS-for-.NET
dotnet buildLe paquet cible net8.0 et netstandard2.0 et ne possède aucune dépendance d’exécution externe.
Étape 2: importer l’espace de noms
Ajoutez une seule directive using — elle expose ImageProbe, ImageInfo et ImageFormat, toute la surface API, il n’y a donc rien d’autre à importer:
using Aspose.Imaging.Foss;Étape 3: sonder un fichier par chemin
ImageProbe.ProbeFile lit juste assez d’en-tête du fichier pour remplir un résultat ImageInfo — il ne décode jamais les données de pixel:
var info = ImageProbe.ProbeFile("photo.jpg");
Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}, {info.BitDepth}-bit");Étape 4: sonder un flux ou un tableau d’octets
Lorsque l’image est déjà en mémoire ou provient d’un flux (un téléchargement, une réponse réseau), utilisez les surcharges qui les acceptent directement au lieu d’écrire d’abord dans un fichier temporaire:
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) fonctionne avec les flux à la fois recherchables et non recherchables.
Étape 5: utilisez DetectFormat lorsque vous n’avez besoin que du format
Si vous n’avez besoin que de vous baser sur le format et n’avez pas besoin des dimensions, de la profondeur de bits ou du nombre d’images, DetectFormat ignore le reste de l’analyse de l’en-tête:
var format = ImageProbe.DetectFormat(bytes);
if (format == ImageFormat.Dicom)
{
// route to DICOM-specific handling
}Étape 6 : Lire les champs ImageInfo nullables en toute sécurité
Width, Height, BitDepth et FrameCount sont nullables — ils ne sont remplis que lorsque l’en-tête du format détecté porte effectivement cette valeur. Format est le seul champ toujours défini une fois l’en-tête reconnu:
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");
}Problèmes courants et solutions
Le format s’affiche comme ImageFormat.Unknown. L’en-tête du fichier ne correspond à aucun des 11 formats reconnus (PNG, JPEG, GIF, BMP, WebP, ICO, TIFF, PSD, EMF, WMF, DICOM). Vérifiez que le fichier est réellement l’un de ces formats — ImageProbe ne génère jamais d’exception pour un en-tête non reconnu, il signale Unknown à la place.
Width/Height are null même si Format est défini. Tous les en-têtes de format ne contiennent pas chaque champ, et un fichier tronqué peut se couper avant les octets d’un champ. Vérifiez Format d’abord, puis traitez le reste comme optionnel.
Calling Probe when DetectFormat le ferait. Probe and ProbeFile analyse l’en-tête complet ; DetectFormat lit seulement assez pour identifier le format. Utilisez DetectFormat si vous ne lisez jamais Width/Height/BitDepth/FrameCount.
En attente de données de pixels décodées. ImageProbe ne décode jamais, n’affiche ni ne convertit le contenu d’image — il ne lit que les métadonnées d’en-tête. Le décodage et les opérations au niveau des pixels nécessitent le SDK commercial Aspose.Imaging.
Foire aux questions
Que se passe-t-il si j’interroge un fichier tronqué ou corrompu?
ImageProbe ne lève jamais d’exception sur une entrée malformée ou tronquée. Il renvoie un ImageInfo partiel — Format est défini chaque fois que le marqueur de format de l’en-tête a été reconnu, même si le reste du fichier est coupé.
Le ImageProbe est-il thread-safe?
Oui. ImageProbe est statique et ne conserve aucun état mutable entre les appels, de sorte que les appels concurrents depuis plusieurs threads sont sûrs.
Puis-je construire directement un ImageInfo, sans interroger un vrai fichier?
Oui. Le constructeur de ImageInfo est public et ne nécessite que format — utile pour créer des doubles de test: new ImageInfo(ImageFormat.Png, width: 64, height: 48).
Dois-je libérer quelque chose?
Non. ImageProbe ne possède aucune ressource IDisposable propre. Si vous transmettez un Stream que vous avez ouvert vous-même, vous restez responsable de son élimination.