Pergunta

Eu gostaria de escrever um pequeno programa em C# que passa pela minha fotos jpeg e, por exemplo, classifica-os em datado de pastas (usando MEU namoro convenções, caramba...).

Alguém sabe uma maneira relativamente fácil de obter os dados EXIF, tais como Data E Hora ou a Exposição através de programação?Obrigado!

Foi útil?

Solução

Confira este extrator de metadados. Ele é escrito em Java, mas também foi portado para o C#. Eu tenho usado a versão do Java para escrever um pequeno utilitário para renomear meus arquivos jpeg com base na data e modelo tags.Muito fácil de usar.


EDITAR metadados-extractor suporta .NET também.É muito rápido e simples de biblioteca para acessar os metadados de imagens e vídeos.

É totalmente oferece suporte a Exif, bem como IPTC, XMP e muitos outros tipos de metadados a partir de tipos de arquivo, incluindo JPEG, PNG, GIF, PNG, ICO, WebP, PSD, ...

var directories = ImageMetadataReader.ReadMetadata(imagePath);

// print out all metadata
foreach (var directory in directories)
foreach (var tag in directory.Tags)
    Console.WriteLine($"{directory.Name} - {tag.Name} = {tag.Description}");

// access the date time
var subIfdDirectory = directories.OfType<ExifSubIfdDirectory>().FirstOrDefault();
var dateTime = subIfdDirectory?.GetDateTime(ExifDirectoryBase.TagDateTime);

Ele está disponível através de NuGet e o o código está no GitHub.

Outras dicas

Como sugestão, você pode usar alguns 3ª parte da biblioteca, ou fazê-lo manualmente (o que não é muito trabalho), mas a mais simples e a mais flexível, é, talvez, usar o built-in funcionalidade .LÍQUIDA.Para mais informações, consulte:

Eu digo "é o mais flexível", porque .NET não tentar interpretar ou de adesão a dados em qualquer forma.Para cada EXIF basicamente, você terá uma matriz de bytes.Isso pode ser bom ou ruim, dependendo de quanto controle você realmente quer.

Além disso, gostaria de salientar que a lista de propriedade, de fato, não correspondem diretamente para o EXIF valores.EXIF é guardada em várias tabelas com a sobreposição de IDENTIFICAÇÃO, mas .NET coloca tudo em uma lista e redefine a IDENTIFICAÇÃO de alguns itens.Mas enquanto você não se preocupa com o preciso EXIF ID, você deve estar bem com o que .LÍQUIDO de mapeamento.

Aqui está um link para outro semelhantes pergunta, que tem uma resposta, apontando para esse bom artigo sobre "A leitura, a escrita e metadados de fotos" em .Líquida.

Você pode usar A TagLib# qual é utilizado por aplicações como o O F-Spot.Além do Exif, ele vai ler uma boa quantidade de formatos de metadados para imagem, áudio e vídeo.

Eu também gosto de ExifUtils API, mas é buggy e não é desenvolvido ativamente.

Classe de imagem tem PropertyItems e PropertyIdList propriedades.Você pode usá-los.

A obtenção de dados EXIF de uma imagem JPEG envolve:

  1. Buscando o JPEG marcadores que menciona o início dos dados EXIF.exemplo:normalmente oxFFE1 é o marcador inserido durante a codificação de dados EXIF, que é um segmento de aplicações, onde os dados EXIF vai.
  2. Analisar todos os dados de dizer 0xFFE1 para 0xFFE2 .Estes dados seriam fluxo de bytes, no formato JPEG arquivo codificado.
  3. ASCII equivalente a esses bytes deve conter várias informações relacionadas com a Imagem, Data, Nome do Modelo da Câmera, Exposição etc...

A ferramenta de linha de comando ExifTool por Phil Harvey trabalha com dezenas de formatos de imagem, incluindo a abundância de propriedade formatos RAW e pode manipular uma variedade de formatos de metadados, incluindo EXIF, GPS, IPTC, XMP, JFIF.

Muito fácil de usar, leve, impressionante aplicativo.

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