Introdução
Aspose.Imaging FOSS para .NET é uma biblioteca gratuita, licenciada sob MIT, de código aberto para desenvolvedores .NET que precisam saber o que um arquivo de imagem is — seu formato, dimensões, profundidade de bits e contagem de quadros — sem pagar o custo de decodificá-lo. A estática ImageProbe classe é o ponto de entrada: ProbeFile(path) lê do disco, Probe(stream) and Probe(data) aceita um fluxo ou array de bytes, e DetectFormat(stream) / DetectFormat(data) retorna o ImageFormat valor enum sem construir um completo ImageInfo, para chamadores que só precisam ramificar com base no formato. Cada método de sondagem retorna um ImageInfo objeto com nullable Width, Height, BitDepth, e FrameCount propriedades, preenchidas somente quando o cabeçalho do formato detectado realmente contém esse valor.
Esta é uma ferramenta deliberadamente restrita, e esse é o objetivo. Ela não decodifica pixels, renderiza imagens ou converte entre formatos — para isso, o produto comercial Aspose.Imaging para .NET é a escolha certa (link abaixo em Código Aberto e Licenciamento). O que Aspose.Imaging FOSS para .NET faz é o trabalho muito menor e muito mais comum de responder “qual é o formato disso, e qual o tamanho?” o mais rápido e seguro possível, para a classe de problemas em que a decodificação completa seria trabalho desperdiçado: validar um upload, dimensionar um layout de miniaturas, triagear um lote de arquivos mistos ou ler campos de cabeçalho DICOM para uma verificação pré-processamento.
A biblioteca é licenciada sob MIT, sem dependências externas e tem como alvo tanto netstandard2.0 quanto net8.0 — gratuita para uso open-source e comercial, sem royalties ou restrições de redistribuição.
Principais Recursos
Três maneiras de sondar um arquivo
ImageProbe oferece pontos de entrada de caminho de arquivo, fluxo e array de bytes, de modo que se adapta onde quer que os dados da imagem já estejam no seu pipeline — no disco, já na memória ou chegando pela rede. DetectFormat evita a construção de um ImageInfo completo quando você só precisa ramificar com base no 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 Estruturados, Honestos
ImageInfo expõe Format (um valor enum ImageFormat, sempre definido assim que o cabeçalho é reconhecido) ao lado de Width anulável, Height, BitDepth e FrameCount. “Nullable” está fazendo o trabalho real aqui: o preenchimento dos campos realmente varia por formato, e ImageInfo nunca fabrica um valor que o cabeçalho de um formato não contém. Verificar null antes de usar é o padrão correto, não um pensamento defensivo 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, Incluindo Três Que Não Detectam Mais Nada no Espaço .NET de FOSS
PNG, JPEG, GIF, BMP, WebP (com perdas, sem perdas e estendido), ICO, TIFF, PSD, EMF, WMF e DICOM. O preenchimento dos campos difere por formato intencionalmente, não por omissão — PNG contém largura, altura, profundidade de bits, and contagem de quadros (embora FrameCount é codificado 1, não detecção real de quadros animated-PNG); FrameCount é uma contagem genuína dos tamanhos de ícones incorporados em seu diretório, e um 0 byte no campo de dimensão de uma entrada de diretório ICO significa 256px, conforme a especificação do formato; TIFF’s FrameCount reflete uma caminhada limitada da cadeia IFD do arquivo, um IFD por página.
Três desses onze — PSD, EMF/WMF e DICOM — não têm outro detector .NET gratuito e de código aberto de que tenhamos conhecimento, o que é uma parte real do motivo pelo qual esta biblioteca existe.
WMF e EMF: Dois Formatos Legados, Dois Limites Diferentes
WMF não posicionável ainda é corretamente identificado como ImageFormat.Wmf, mas apenas WMF posicionável preenche dimensões — derivadas dos limites de unidades por polegada do cabeçalho via conversão codificada de 96 DPI, já que o WMF em si não contém tamanho absoluto em pixels. EMF não possui nenhum campo explícito de largura/altura; suas dimensões vêm do retângulo de espaço de dispositivo rclBounds no cabeçalho EMF. Ambos são refletidos honestamente em ImageInfo: quando um valor não pode ser derivado, a propriedade permanece null em vez de adivinhar.
Análise de Cabeçalho DICOM Sem um Visualizador
ImageProbe lê cabeçalhos DICOM em sintaxes de transferência Implicit VR Little Endian e Explicit VR Little/Big Endian, extraindo Rows para Height, Columns para Width e BitsAllocated para BitDepth — sem necessidade de visualizador DICOM ou dependência de imagem externa. A análise é conservadora por design: um elemento de sequência de comprimento indefinido interrompe a varredura em vez de adivinhar seu conteúdo, de modo que um arquivo DICOM parcialmente compreendido regride para um ImageInfo parcial ao invés de um incorreto.
Nunca gera exceção em entrada malformada ou truncada
Probe foi projetado para arquivos não confiáveis, parciais ou em trânsito. Se um arquivo corresponde à assinatura de um formato mas seu cabeçalho não pode ser totalmente analisado — um download truncado, um upload corrompido — o resultado contém apenas o Format detectado em vez de uma exceção.
byte[] truncated = fullFileBytes[..^3];
var info = ImageProbe.Probe(truncated);
// info.Format is still populated; other fields may be null
Início rápido
Instale o pacote e, em seguida, analise um arquivo do disco para ler seu formato detectado, dimensões, profundidade de bits e contagem de quadros em uma única chamada, seguido de uma verificação apenas de formato usando os bytes brutos:
git clone https://github.com/aspose-imaging-foss/Aspose.Imaging-FOSS-for-.NET.git
cd Aspose.Imaging-FOSS-for-.NET
dotnet buildusing 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 suportados
Aspose.Imaging FOSS para .NET detects todos os 11 formatos abaixo e lê metadados ao nível do cabeçalho — não decodifica dados de pixel, portanto não há capacidade de “write” para relatar. O preenchimento dos campos varia conforme o formato; veja a análise detalhada em Principais Recursos acima.
| Formato | Extensão | Detected | Largura / Altura | Profundidade de bits | Contagem de quadros |
|---|---|---|---|---|---|
| PNG | .png | ✓ | ✓ | ✓ | ✓ |
| JPEG | .jpg / .jpeg | ✓ | ✓ | ✓ | — |
| GIF | .gif | ✓ | ✓ | — | ✓ |
| BMP | .bmp | ✓ | ✓ | ✓ | — |
| WebP | .webp | ✓ | ✓ | — | — |
| ICO | .ico | ✓ | ✓ | ✓ | ✓ |
| TIFF | .tif / .tiff | ✓ | ✓ | ✓ | ✓ |
| PSD | .psd | ✓ | ✓ | ✓ | — |
| EMF | .emf | ✓ | ✓ (dos limites) | — | — |
| WMF | .wmf | ✓ | ✓ (somente inserível, 96 DPI) | — | — |
| DICOM | .dcm | ✓ | ✓ (Linhas/Colunas) | ✓ (BitsAllocated) | — |
Código Aberto e Licenciamento
Aspose.Imaging FOSS para .NET tem licença MIT sem dependências externas. A licença MIT permite o uso tanto em projetos de código aberto quanto comerciais, sem royalties ou restrições de redistribuição. O código-fonte está disponível em GitHub. Ele foi intencionalmente limitado apenas à detecção de formatos — para decodificar, editar ou converter esses formatos de imagem, consulte Aspose.Imaging para .NET — Enterprise Product.