Leia da imagem Propriedades estendidas em c #
-
20-09-2019 - |
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?
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
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.
Verifique esta pergunta:
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 .