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 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 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.

FormatoExtensãoDetectedLargura / AlturaProfundidade de bitsContagem 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.


Primeiros Passos

Recursos Relacionados