Pergunta

Eu gostaria de encontrar a altura / largura de uma imagem no disco sem abri-lo, se possível (por motivos de desempenho).

O painel de propriedades do Windows para imagens contém informações como largura, altura, profundidade de bits, etc., o que me leva a crer que ele está armazenando metadados no algum lugar do arquivo. Como posso aceder a esta informação?

Foi útil?

Solução

Há algumas perguntas stackoverflow sobre como ler as informações EXIF ??das imagens, tais como: Como obter os dados EXIF ??de um arquivo usando C #

Outras dicas

classe

Use System.Drawing.Image.

        Image img = Image.FromFile(fileName);
        ImageFormat format = img.RawFormat;
        Console.WriteLine("Image Type : "+format.ToString());
        Console.WriteLine("Image width : "+img.Width);
        Console.WriteLine("Image height : "+img.Height);
        Console.WriteLine("Image resolution : "+(img.VerticalResolution*img.HorizontalResolution));

        Console.WriteLine("Image Pixel depth : "+Image.GetPixelFormatSize(img.PixelFormat));
        Console.WriteLine("Image Creation Date : "+creation.ToString("yyyy-MM-dd"));
        Console.WriteLine("Image Creation Time : "+creation.ToString("hh:mm:ss"));
        Console.WriteLine("Image Modification Date : "+modify.ToString("yyyy-MM-dd"));
        Console.WriteLine("Image Modification Time : "+modify.ToString("hh:mm:ss"));

A maneira mais fácil de conseguir isso é, assumindo que a imagem é quadrado é levar o tamanho do arquivo em bytes e tirar a raiz quadrada. Esta será a sua largura e altura.

256 bytes = 16px x 16px

:-)

Ou, você pode tentar ler informações EXIF ??da imagem usando esta codeplex biblioteca

Windows não armazena (this) metadados em qualquer lugar especial no sistema de arquivos; a janela Propriedades simplesmente lê-los do próprio arquivo de imagem.

Eu não acho .NET ofertas quaisquer funções para ler apenas os metadados de uma imagem sem carregar a imagem inteira. Se você está lidando com apenas um número limitado de diferentes formatos de imagem (por exemplo, apenas JPEG, PNG e GIF), não deve ser muito difícil de ler o tamanho do cabeçalho da imagem si mesmo.

Se, por outro lado, você tem que lidar com muitos formatos de imagem, talvez você possa ter um olhar para o código-fonte do Unix utilidade file . Ele consegue detectar o tamanho de muitos, muitos formatos de imagem diferentes, e é incrivelmente rápido para arrancar.

A fim de obter a largura ea altura de uma imagem (essencialmente, como você diz, os metadados) você Have a abrir o arquivo, analisar algum tipo de informações de cabeçalho e obter o que você quer assim.

Você não tem que ler todas as informações cor / bitmap, apenas o cabeçalho.

Esta é a mesma forma como o Windows é capaz de carregar ícones de arquivos de aplicativos sem realmente executá-los.

Para ler as propriedades exibidas pelo Windows Explorer você pode usar o Controles Microsoft Shell e Automação componente. A vantagem disso é que você não precisa de qualquer biblioteca de terceiros (o objeto COM já está lá) ou código adicional para analisar o cabeçalho de imagem e que ele vai trabalhar com uma variedade de formatos.

O código de exemplo pode ser encontrado em uma resposta a uma pergunta relacionada .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top