Núcleo API
API de núcleo
Aspose.Imaging FOSS para toda a superfície pública de .NET consiste em três classes: ImageProbe (a fachada estática), ImageInfo (o valor de resultado), e ImageFormat (o enum de formato). Esta página cobre como eles se encaixam como um contrato, além do tour por recurso em Recursos e Funcionalidades.
O contrato de três classes
ImageProbe— estático, sem estado. Cada chamada é independente; não há nada para configurar ou descartar.ImageInfo— selado, imutável. Todas as cinco propriedades (Format,Width,Height,BitDepth,FrameCount).ImageFormat— um enum com um valor por formato reconhecido, maisUnknown.
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 itConstruindo ImageInfo diretamente
O construtor de ImageInfo é público — somente format é necessário, todos os demais parâmetros têm como padrão null. Isso é útil para testes unitários que precisam de um resultado substituto sem sondar um arquivo 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);Não há uma maneira correspondente de mutate an ImageInfo após a construção — cada propriedade é somente leitura, portanto, uma instância sondada ou construída é segura para ser passada e armazenada em cache sem cópia defensiva.
Escolhendo a sobrecarga correta
| Overload | Use quando |
|---|---|
ImageProbe.ProbeFile(path) | Você tem um caminho de arquivo e deseja o ImageInfo completo |
ImageProbe.Probe(stream) | Você já tem um Stream aberto (buscável ou não) e deseja o ImageInfo completo |
ImageProbe.Probe(data) | Você já tem os bytes na memória e quer o ImageInfo completo |
ImageProbe.DetectFormat(stream) / (data) | Você só precisa fazer a ramificação em ImageFormat — ignore a análise do cabeçalho além da assinatura do formato |
ProbeFile abre e lê o arquivo por si mesmo — não há necessidade de abrir um FileStream primeiro apenas para chamar Probe(stream).
Sondagem em lote de um diretório
Como ImageProbe nunca lança exceção, uma varredura de diretório pode chamá-lo em um loop apertado sem try/catch por arquivo:
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}");
}Qualquer arquivo cujo cabeçalho não corresponda a um dos 11 formatos reconhecidos resolve para ImageFormat.Unknown em vez de lançar exceção — o loop acima nunca precisa de um bloco catch.
O contrato de nunca lançar exceção
Isso não é um comportamento incidental — é uma parte deliberada do contrato API. Se o cabeçalho de um formato reconhecido for truncado ou malformado durante a análise, ImageProbe ainda retorna um ImageInfo com Format definido para o formato que reconheceu; não propaga uma exceção de análise ao chamador. Apenas Format é garantido — trate todas as demais propriedades como opcionais, independentemente de qual formato foi detectado.
Problemas Comuns
| Problema | Causa | Correção |
|---|---|---|
O ImageInfo construído não corresponde a um resultado de sondagem real | Instâncias construídas manualmente não validam a consistência entre os campos | Use a construção manual apenas para duplos de teste, não como substituto para sondar arquivos reais |
Chamando Probe quando DetectFormat seria suficiente | Análise de cabeçalho desnecessária quando apenas o formato é necessário | Use DetectFormat se você nunca ler Width/Height/BitDepth/FrameCount |
Formato Unknown para um arquivo que você espera que seja suportado | O cabeçalho não corresponde a nenhuma das 11 assinaturas reconhecidas, ou o arquivo tem um formato completamente diferente | Confirme o arquivo contra o lista de formatos suportados |
FAQ
Posso criar uma subclasse de ImageInfo ou ImageProbe?
Não. ImageInfo é sealed e ImageProbe é static — nenhum deles foi projetado para subclassificação ou instanciação por herança.
O ImageProbe é thread-safe?
ImageProbe não mantém estado mutável entre chamadas — cada chamada a Probe, ProbeFile ou DetectFormat é independente, tornando seguras as chamadas concorrentes de múltiplas threads.
Preciso descartar algo?
Não. ImageProbe não possui recursos IDisposable próprios. Se você passar um Stream que abriu, continua responsável por descartar esse stream — Probe(stream) não o fecha.
API Reference Resumo
| Classe / Método | Descrição |
|---|---|
ImageProbe.ProbeFile(path) | Examinar um arquivo por caminho |
ImageProbe.Probe(stream) | Examinar um Stream |
ImageProbe.Probe(data) | Examinar um byte[] |
ImageProbe.DetectFormat(stream) | Somente formato, de um Stream |
ImageProbe.DetectFormat(data) | Somente formato, de um byte[] |
ImageInfo(format, width, height, bitDepth, frameCount) | Construtor público — somente format é necessário |
ImageInfo.Format / .Width / .Height / .BitDepth / .FrameCount | Propriedades de resultado somente leitura |
ImageFormat | Enum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom |