Introduction

Aspose.Imaging FOSS pour .NET est une bibliothèque gratuite, sous licence MIT, open source pour les développeurs .NET qui ont besoin de connaître ce qu’est un fichier image is — son format, ses dimensions, sa profondeur de bits et le nombre de trames — sans payer le coût du décodage. La ImageProbe classe statique est le point d’entrée : ProbeFile(path) lit depuis le disque, Probe(stream) and Probe(data) accepte un flux ou un byte array, et DetectFormat(stream) / DetectFormat(data) renvoie le ImageFormat valeur d’énumération sans construire un complet ImageInfo, pour les appelants qui n’ont besoin que de se ramifier selon le format. Chaque méthode de sondage renvoie un ImageInfo objet avec nullable Width, Height, BitDepth, et FrameCount propriétés, remplis uniquement lorsque l’en-tête du format détecté porte réellement cette valeur.

C’est un outil délibérément limité, et c’est l’objectif. Il ne décode pas les pixels, ne rend pas d’images, et ne convertit pas entre formats — pour cela, le produit commercial Aspose.Imaging pour .NET est le bon choix (lien ci-dessous sous Open Source et Licence). Ce que Aspose.Imaging FOSS pour .NET fait, c’est le travail bien plus petit et beaucoup plus courant de répondre à "quel format est-ce, et quelle taille a-t-il ?" aussi rapidement et en toute sécurité que possible, pour la classe de problème où le décodage complet serait un travail gaspillé: valider un téléchargement, dimensionner une mise en page de vignettes, trier un lot de fichiers mixtes, ou lire les champs d’en-tête DICOM pour une vérification de pré-traitement.

La bibliothèque est sous licence MIT, ne possède aucune dépendance externe et cible à la fois netstandard2.0 et net8.0 — gratuite pour une utilisation open source ou commerciale, sans redevances ni restrictions de redistribution.


Fonctionnalités clés

Trois manières de sonder un fichier

ImageProbe propose des points d’entrée par chemin de fichier, flux et tableau d’octets, de sorte qu’il s’intègre partout où les données d’image résident déjà dans votre pipeline — sur disque, déjà en mémoire, ou arrivant via le réseau. DetectFormat évite de construire un ImageInfo complet lorsque vous n’avez besoin que de choisir en fonction du format.

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

Résultats structurés, honnêtes

ImageInfo expose Format (une valeur d’énumération ImageFormat, toujours définie dès que l’en-tête est reconnu) aux côtés de Width, Height, BitDepth et FrameCount pouvant être nullables. “Nullable” joue un rôle réel ici: la population des champs varie réellement selon le format, et ImageInfo ne fabrique jamais une valeur qu’un en-tête de format ne porte pas. Vérifier null avant utilisation est le schéma correct, pas une réflexion défensive après coup.

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

11 formats, dont trois que rien d’autre dans l’espace .NET FOSS ne détecte

PNG, JPEG, GIF, BMP, WebP (lossy, lossless, and extended), ICO, TIFF, PSD, EMF, WMF, et DICOM. Le remplissage des champs diffère selon le format volontairement, pas par omission — PNG fournit la largeur, la hauteur, la profondeur de bits, and nombre de cadres (bien que FrameCount soit un codé en dur 1, pas une vraie détection de cadres PNG animés) ; JPEG et BMP fournissent les dimensions et la profondeur de bits mais jamais de nombre de cadres ; WebP ne fournit que les dimensions ; ICO’s FrameCount est un décompte réel des tailles d’icônes intégrées dans son répertoire, et un 0 octet dans le champ de dimension d’une entrée de répertoire ICO signifie 256 px, selon les spécifications du format ; TIFF’s FrameCount reflète un parcours limité de la chaîne IFD du fichier, un IFD par page.

Trois de ces onze — PSD, EMF/WMF et DICOM — n’ont aucun autre détecteur .NET gratuit et open source dont nous ayons connaissance, ce qui explique en partie pourquoi cette bibliothèque existe.

WMF et EMF: deux formats hérités, deux limites différentes

Le WMF non-placable est toujours correctement identifié comme ImageFormat.Wmf, mais seul le WMF placable remplit les dimensions — dérivées des limites unités-par-pouce de l’en-tête via une conversion codée en dur à 96 DPI, puisque le WMF ne porte aucune taille de pixel absolue. L’EMF n’a aucun champ largeur/hauteur explicite; ses dimensions proviennent du rectangle d’espace-appareil rclBounds dans l’en-tête EMF à la place. Les deux sont fidèlement reflétés dans ImageInfo: lorsqu’une valeur ne peut pas être dérivée, la propriété reste null plutôt que de deviner.

Analyse de l’en-tête DICOM sans visualiseur

ImageProbe lit les en-têtes DICOM selon les syntaxes de transfert Implicit VR Little Endian et Explicit VR Little/Big Endian, extrayant Rows vers Height, Columns vers Width, et BitsAllocated vers BitDepth — aucun visualiseur DICOM ni dépendance d’imagerie externe n’est requis. L’analyse est conservatrice par conception: un élément de séquence de longueur indéfinie interrompt le parcours plutôt que de deviner son contenu, de sorte qu’un fichier DICOM partiellement compris se dégrade en un ImageInfo partiel plutôt qu’en un erroné.

Ne lève jamais d’exception sur une entrée malformée ou tronquée.

Probe est conçu pour des fichiers non fiables, partiels ou en cours de transfert. Si un fichier correspond à la signature d’un format mais que son en-tête ne peut pas être entièrement analysé — un téléchargement tronqué, un upload corrompu — le résultat ne contient que le Format détecté plutôt qu’une exception.

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

Démarrage rapide

Installez le paquet, puis interrogez un fichier sur le disque pour lire son format détecté, ses dimensions, sa profondeur de bits et son nombre d’images en un seul appel, suivi d’une vérification du format uniquement à l’aide des octets bruts:

git clone https://github.com/aspose-imaging-foss/Aspose.Imaging-FOSS-for-.NET.git
cd Aspose.Imaging-FOSS-for-.NET
dotnet build
using 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);

Formats pris en charge

Aspose.Imaging FOSS for .NET detects les 11 formats ci-dessous et lit les métadonnées au niveau de l’en-tête — il ne décode pas les données de pixel, il n’y a donc aucune capacité d’« write » à signaler. Le remplissage des champs varie selon le format ; voir le détail dans Fonctionnalités clés ci-dessus.

FormatExtensionDetectedLargeur / HauteurProfondeur de bitsNombre d’images
PNG.png✓✓✓✓
JPEG.jpg / .jpeg✓✓✓—
GIF.gif✓✓—✓
BMP.bmp✓✓✓—
WebP.webp✓✓——
ICO.ico✓✓✓✓
TIFF.tif / .tiff✓✓✓✓
PSD.psd✓✓✓—
EMF.emf✓✓ (à partir des limites)——
WMF.wmf✓✓ (uniquement placable, 96 DPI)——
DICOM.dcm✓✓ (Lignes/Colonnes)✓ (BitsAllocated)—

Open Source et Licence

Aspose.Imaging FOSS pour .NET est sous licence MIT sans dépendances externes. La licence MIT autorise l’utilisation tant dans des projets open source que commerciaux, sans redevances ni restrictions de redistribution. Le code source est disponible sur GitHub. Il est intentionnellement limité à la détection de format uniquement — pour le décodage, l’édition ou la conversion de ces formats d’image, consultez Aspose.Imaging pour .NET — Produit Entreprise.


Commencer

Ressources associées