Núcleo API
API principal
Aspose.Imaging FOSS para la superficie pública completa de .NET son tres clases: ImageProbe (la fachada estática), ImageInfo (el valor de resultado), y ImageFormat (el enum de formato). Esta página cubre cómo se combinan como un contrato, más allá del recorrido por característica en Características y Funcionalidades.
El contrato de tres clases
ImageProbe— estático, sin estado. Cada llamada es independiente; no hay nada que configurar o disponer.ImageInfo— sellado, inmutable. Todas las cinco propiedades (Format,Width,Height,BitDepth,FrameCount) son de solo lectura una vez construidas.ImageFormat— un enum con un valor por cada formato reconocido, másUnknown.
using Aspose.Imaging.Foss;
var info = ImageProbe.ProbeFile("photo.jpg");
ImageFormat format = info.Format; // always set
int? width = info.Width; // set only when the format's header carries itConstruyendo ImageInfo directamente
El constructor de ImageInfo es público — solo se requiere format, cualquier otro parámetro tiene como valor predeterminado null. Esto es útil para pruebas unitarias que necesitan un resultado sustituto sin examinar un archivo real:
using Aspose.Imaging.Foss;
// Fake a PNG result for a test double, with no dimensions
var fakeInfo = new ImageInfo(ImageFormat.Png);
// Fake a fully-populated result
var fullInfo = new ImageInfo(ImageFormat.Gif, width: 64, height: 48, bitDepth: 8, frameCount: 3);No hay una forma correspondiente de mutate an ImageInfo después de la construcción — cada propiedad es de solo lectura, por lo que una instancia sondeada o construida es segura para pasarla y almacenar en caché sin copia defensiva.
Elegir la sobrecarga correcta
| Overload | Usar cuando |
|---|---|
ImageProbe.ProbeFile(path) | Tienes una ruta de archivo y quieres el ImageInfo completo |
ImageProbe.Probe(stream) | Ya tienes un Stream abierto (posicionable o no) y deseas el ImageInfo completo |
ImageProbe.Probe(data) | Ya tienes los bytes en memoria y deseas el ImageInfo completo |
ImageProbe.DetectFormat(stream) / (data) | Solo necesitas ramificar en ImageFormat — omite el análisis del encabezado más allá de la firma del formato |
ProbeFile abre y lee el archivo por sí mismo — no es necesario abrir un FileStream primero solo para llamar a Probe(stream).
Sondeo por lotes de un directorio
Debido a que ImageProbe nunca lanza una excepción, un escaneo de directorios puede llamarlo en un bucle ajustado sin try/catch por archivo:
using Aspose.Imaging.Foss;
foreach (var path in Directory.GetFiles("incoming"))
{
var info = ImageProbe.ProbeFile(path);
if (info.Format == ImageFormat.Unknown)
{
Console.WriteLine($"{path}: not a recognized image format, skipping");
continue;
}
Console.WriteLine($"{path}: {info.Format} {info.Width}x{info.Height}");
}Cualquier archivo cuyo encabezado no coincida con uno de los 11 formatos reconocidos se resuelve a ImageFormat.Unknown en lugar de lanzar una excepción — el bucle anterior nunca necesita un bloque catch.
El contrato de nunca lanzar excepciones
Esto no es un comportamiento incidental — es una parte deliberada del contrato API. Si el encabezado de un formato reconocido se trunca o está mal formado a mitad del análisis, ImageProbe aún devuelve un ImageInfo con Format establecido al formato que sí reconoció; no propaga una excepción de análisis al llamador. Sólo se garantiza Format — trate cada otra propiedad como opcional sin importar qué formato se detectó.
Problemas comunes
| Problema | Causa | Corrección |
|---|---|---|
El ImageInfo construido no coincide con un resultado de sondeo real | Las instancias construidas manualmente no validan la consistencia entre los campos | Utiliza la construcción manual solo para dobles de prueba, no como sustituto de sondear archivos reales |
Llamar a Probe cuando DetectFormat bastaría | Análisis de encabezado innecesario cuando solo se necesita el formato | Utiliza DetectFormat si nunca lees Width/Height/BitDepth/FrameCount |
Formato Unknown para un archivo que esperas que sea compatible | El encabezado no coincide con ninguna de las 11 firmas reconocidas, o el archivo es de un formato completamente diferente | Confirma el archivo contra el lista de formatos compatibles |
FAQ
¿Puedo crear una subclase de ImageInfo o ImageProbe?
No. ImageInfo es sealed y ImageProbe es static — ninguno está diseñado para subclasificar o instanciar mediante herencia.
¿Es ImageProbe seguro para hilos?
ImageProbe no mantiene estado mutable entre llamadas — cada llamada a Probe, ProbeFile o DetectFormat es independiente, lo que hace que las llamadas concurrentes desde varios hilos sean seguras.
¿Necesito liberar algo?
No. ImageProbe no tiene recursos IDisposable propios. Si pasas un Stream que tú mismo abriste, sigues siendo responsable de liberar ese flujo — Probe(stream) no lo cierra.
API Reference Resumen
| Clase / Método | Descripción |
|---|---|
ImageProbe.ProbeFile(path) | Examinar un archivo por ruta |
ImageProbe.Probe(stream) | Examinar un Stream |
ImageProbe.Probe(data) | Examinar un byte[] |
ImageProbe.DetectFormat(stream) | Solo formato, de un Stream |
ImageProbe.DetectFormat(data) | Solo formato, de un byte[] |
ImageInfo(format, width, height, bitDepth, frameCount) | Constructor público — solo se requiere format |
ImageInfo.Format / .Width / .Height / .BitDepth / .FrameCount | Propiedades de resultado de solo lectura |
ImageFormat | Enumeración: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom |