Introducción

Aspose.Imaging FOSS para .NET es una biblioteca gratuita, con licencia MIT, de código abierto para desarrolladores de .NET que necesitan saber qué es un archivo de imagen is — su formato, dimensiones, profundidad de bits y recuento de fotogramas — sin pagar el costo de decodificarlo. La estática ImageProbe clase es el punto de entrada: ProbeFile(path) lee del disco, Probe(stream) and Probe(data) acepta un flujo o matriz de bytes, y DetectFormat(stream) / DetectFormat(data) devuelve el ImageFormat valor de enumeración sin construir un completo ImageInfo, para los llamadores que solo necesitan ramificar según el formato. Cada método de sondeo devuelve un ImageInfo objeto con nullable Width, Height, BitDepth, y FrameCount propiedades, pobladas solo cuando el encabezado del formato detectado realmente lleva ese valor.

Esta es una herramienta deliberadamente estrecha, y ese es el objetivo. No decodifica píxeles, renderiza imágenes ni convierte entre formatos — para eso, el producto comercial Aspose.Imaging para .NET es la elección correcta (enlazado más abajo bajo Código abierto y licencias). Lo que Aspose.Imaging FOSS para .NET hace es la tarea mucho más pequeña y mucho más común de responder “¿qué formato es este y cuán grande es?” lo más rápido y seguro posible, para la clase de problemas donde la decodificación completa sería un trabajo desperdiciado: validar una carga, dimensionar un diseño de miniaturas, clasificar un lote de archivos mixtos, o leer campos de encabezado DICOM para una verificación de pre-procesamiento.

La biblioteca tiene licencia MIT, cero dependencias externas y está dirigida tanto a netstandard2.0 como a net8.0 — libre para uso tanto de código abierto como comercial, sin regalías ni restricciones de redistribución.


Características clave

Tres formas de inspeccionar un archivo

ImageProbe ofrece puntos de entrada de ruta de archivo, flujo y arreglo de bytes, por lo que se adapta a donde sea que los datos de la imagen ya residan en su canal — en disco, ya en memoria, o llegando a través de la red. DetectFormat omite construir un ImageInfo completo cuando solo necesita ramificar según el formato.

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

Resultados estructurados y honestos

ImageInfo expone Format (un valor de enumeración ImageFormat, siempre establecido una vez que se reconoce el encabezado) junto a Width nullable, Height, BitDepth y FrameCount. “Nullable” está haciendo un trabajo real aquí: la población de campos varía genuinamente según el formato, y ImageInfo nunca fabrica un valor que el encabezado de un formato no contiene. Verificar null antes de usarlo es el patrón correcto, no una reflexión defensiva posterior.

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

11 formatos, incluidos tres que no detecta nada más en el espacio FOSS .NET

PNG, JPEG, GIF, BMP, WebP (con pérdida, sin pérdida y extendido), ICO, TIFF, PSD, EMF, WMF y DICOM. La población de campos difiere según el formato a propósito, no por omisión — PNG incluye ancho, alto, profundidad de bits, and recuento de fotogramas (aunque FrameCount es un hardcoded 1, no detección real de fotogramas animated-PNG); FrameCount es un recuento genuino de los tamaños de íconos incrustados en su directorio, y un 0 un byte en el campo de dimensión de una entrada de directorio ICO significa 256px, según la especificación del formato; el de TIFF’s FrameCount refleja un recorrido acotado de la cadena IFD del archivo, un IFD por página.

Tres de estos once — PSD, EMF/WMF y DICOM — no tienen otro detector .NET gratuito y de código abierto del que sepamos, lo que es una razón real de por qué existe esta biblioteca.

WMF y EMF: dos formatos heredados, dos límites diferentes

El WMF no portable sigue identificándose correctamente como ImageFormat.Wmf, pero solo el WMF portable rellena las dimensiones — derivadas de los límites de unidades por pulgada del encabezado mediante una conversión codificada de 96 DPI, ya que el WMF en sí no lleva un tamaño de píxel absoluto. EMF no tiene ningún campo explícito de ancho/alto; sus dimensiones provienen del rectángulo de espacio de dispositivo rclBounds en el encabezado EMF. Ambos se reflejan honestamente en ImageInfo: cuando no se puede derivar un valor, la propiedad permanece null en lugar de adivinar.

Análisis del encabezado DICOM sin un visor

ImageProbe lee los encabezados DICOM en los sintaxis de transferencia Implicit VR Little Endian y Explicit VR Little/Big Endian, extrayendo Rows en Height, Columns en Width, y BitsAllocated en BitDepth — no se requiere un visor DICOM ni dependencia externa de imágenes. El análisis es conservador por diseño: un elemento de secuencia de longitud indefinida detiene la caminata en lugar de adivinar su contenido, por lo que un archivo DICOM parcialmente entendido se degrada a un ImageInfo parcial en lugar de uno incorrecto.

Nunca lanza excepciones con entrada malformada o truncada

Probe está diseñado para archivos no confiables, parciales o en tránsito. Si un archivo coincide con la firma de un formato pero su encabezado no puede analizarse completamente — una descarga truncada, una carga corrupta — el resultado lleva solo el Format detectado en lugar de una excepción.

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

Inicio rápido

Instale el paquete, luego sondee un archivo desde el disco para leer su formato detectado, dimensiones, profundidad de bits y recuento de fotogramas en una sola llamada, seguido de una verificación solo de formato usando los bytes sin procesar:

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

Formatos compatibles

Aspose.Imaging FOSS para .NET detects todos los 11 formatos a continuación y lee metadatos a nivel de encabezado — no decodifica datos de píxeles, por lo que no hay capacidad de “write” para informar. La población de campos varía según el formato; consulte el desglose detallado en Características clave arriba.

FormatoExtensiónDetectedAncho / AltoProfundidad de bitsRecuento de fotogramas
PNG.png✓✓✓✓
JPEG.jpg / .jpeg✓✓✓—
GIF.gif✓✓—✓
BMP.bmp✓✓✓—
WebP.webp✓✓——
ICO.ico✓✓✓✓
TIFF.tif / .tiff✓✓✓✓
PSD.psd✓✓✓—
EMF.emf✓✓ (de los límites)——
WMF.wmf✓✓ (solo insertable, 96 DPI)——
DICOM.dcm✓✓ (Filas/Columnas)✓ (BitsAllocated)—

Código abierto y licencias

Aspose.Imaging FOSS para .NET está bajo licencia MIT sin dependencias externas. La licencia MIT permite su uso tanto en proyectos de código abierto como comerciales sin regalías ni restricciones de redistribución. El código fuente está disponible en GitHub. Está intencionalmente limitado a la detección de formatos únicamente — para decodificar, editar o convertir estos formatos de imagen, consulte Aspose.Imaging para .NET — Producto empresarial.


Comenzando

Recursos relacionados