Como modificar a data da criação de uma foto usando a data que a fotografia foi tirada

O título parece meio confuso, mas vou tentar explicar uma situação: Imagine que você tirou várias fotos, e que as mesmas estavam na sua máquina fotográfica. Você decide, então, mover para um computador e mais para frente, fazer uma simples montagem em um programa estilo Sony Vegas, Adobe Premiere, etc.

Ao jogar as suas fotos na timeline, pode ser que a ordem em que as mesmas foram tiradas (e que você gostaria de manter), estejam lá. Mas pode ser, que por algum motivo você andou movendo suas fotos para um backup externo, depois movendo para o PC de volta e assim por diante. O que vai acontecer nesse caso ? Sim, a data da criação do arquivo não irá refletir a data em que necessariamente foi tirada, e você pode perder a ordem das mesmas. Além disso, você pode misturar fotos de diversos diretórios e aí a bagunça fica sem tamanho.

Há alguns softwares no mercado que tomam conta de todo seu acervo digital, porém, decidi pensar em uma forma de acertar as datas de criação das fotos de forma automática, até que modifiquei um simples código python, que implementa o seguinte fluxo:

  • Dado um diretório, listar todos os arquivos .jpg;
  • Para cada arquivo .jpg, extrair as informações EXIF, e localizar a entrada em que a fotografia foi tirada (DateTimeDigitized);
  • Alterar a data de criação do arquivo;
  • Fim do fluxo;

Para fazer isso em Python, você precisará da biblioteca PIL (Python Imaging Library), e de outras libs nativas, como a ‘os’ para modificar a data.

O script final, utilizei com base em outro que estava na internet, bugado, o qual corrigi e estou publicando aqui para download. Também encaminhei o patch ao autor.

Faça download aqui da versão Python.

Também fiz uma versão em .NET usando uma biblioteca chamada ExifTagCollection, disponível no CodeProject. Falta finalizar algumas coisas antes de publicar, mas abaixo um pequeno pedaço que código que mostra como alterar a data de um arquivo:

                        string folder=@"path_to_folder";
                        ExifTagCollection exif = new ExifTagCollection(folder);
			System.Collections.Hashtable h = new System.Collections.Hashtable();

			foreach(ExifTag t in exif)
				h[t.FieldName] = t.Value;

			if( h.ContainsKey("DateTimeDigitized") ) {
				System.IO.FileInfo f =new System.IO.FileInfo(folder);
				f.CreationTime = DateTime.Parse(h["DateTimeDigitized"]);
			}

Espero que seja útil!

Um abraço

Robson

Bookmarksbookmark bookmark bookmark bookmark bookmark bookmark

Popularity: 5%

2 Comments so far

  1. Snowman on August 27th, 2011

    “The final script, I used based on one that was on the internet , buggy, which fix and I am publishing here for download.”

    Where is the code?

  2. admin on August 29th, 2011

    Right above the statement you translated to english, there is: “Faca download aqui da versão Python”.

    Just click and you will see it.

    Best

    Robson

Vale Presente