De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Otávio Corrêa Cordeiro
Data de Publicação: 31 de Julho de 2005
Já participei de alguns fóruns sobre fotografia e uma pergunta sempre estava presente: "Como vocês organizam suas fotografias?" ou suas variantes, como "Qual a melhor forma de organizar fotografias no micro?"
Nesta época eu havia comprado uma câmera digital com suporte a EXIF - Exchangeable Image File, que permite a câmera armazenar informações sobre a fotografia, como velocidade do obturador, tempo de exposição e data de quando a foto foi tirada - e resolvi criar um script em PHP para organizar as novas fotografias da forma que fazia, antes, manualmente.
A idéia deste texto é apresentar uma forma de organizar fotografias e mostrar que o PHP pode ser usado para outras tarefas além de páginas web, como scripts de console para o dia-dia.
Sempre armazenei minhas fotografias em diretórios referente a data em que foram tiradas, no seguinte formato: ANO-MÊS-DIA. Desta forma fica evidente que o diretório mais novo fica sempre abaixo dos demais.
$ ls ~/Pictures 2004-12-24 2005-01-01 2005-01-06
Logo o script deveria seguir na mesma linha.
Há quem não saiba, mas o PHP ser executado via console, bastando, para isso, seu caminho estar no $PATH (Dica válida também para o Windows). No debian:
apt-get install php4-cli php4-common
onde php4-cli é o "command-line interpreter for the php4 script".
Para testar o PHP em console, basta escrever uma aplicação simples como a seguinte:
#!/usr/bin/php <?php if($argc == 1) { // Mostra um help... print "Uso: ". $argv[0] ." Seu_Nome\n"; } else { // Faz o tratamento da string de argumentos... $saida = "Ola, "; for($i=1; $i<$argc; $i++) { $saida .= $argv[$i] . " "; } print $saida . "\n"; } ?>
e para executar
$ php foobar.php Otavio Cordeiro Ola, Otavio Cordeiro $
Com o PHP funcionando, deve-se copiar o script que segue abaixo ou copiar direto da web:
$ wget http://otavio.geek42.org/pr0n/ExifOrganizer/ExifOrganizer.txt $ mv ExifOrganizer.txt ExifOrganizer.php $ chmod +x ExifOrganizer.php
e fazer uma pequena modificação na linha onde é definido o diretório onde as imagens serão criadas, ajustando para o seu diretório de preferência.
$localPictures = "/home/otavio/Pictures";
Uma vez configurado, basta entrar no diretório onde estão as imagens baixadas pelo software de aquisição de imagens - como gphoto2 - e executar, por exemplo:
php ExifOrganizer.php *jpg
O Script apaga a fotografia original do diretório onde estava deixando apenas uma cópia no novo destino. Para evitar a deleção, basta retirar, nas duas linhas onde é chamada, a função unlink($fileName).
#!/usr/bin/php <?php /* Copyright (C) 2005 - Otávio Corrêa Cordeiro This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ function moveFile($fileName){ $localPictures = "/home/otavio/Pictures"; // Garante que a verificacao do suporte a EXIF do PHP. // O suporte é dado na compilação do PHP: --enable-exif if(!extension_loaded(exif)) { print "Please, check your PHP instalation/compilation.\n"; print "PHP should by compiled with --enable-exif option.\n"; return; } // Verifica o tipo do arquivo. //$fileType = mime_content_type($fileName); list($altura, $largura, $fileType) = getimagesize($fileName); if($fileType != "2") return; // Cria o EXIF da imagem e extrai a data da Fotografia $exif = exif_read_data($fileName, 'EXIF'); $capture_data = $exif['DateTimeOriginal']; // Reestrutura a string da data $capture_data = str_replace(" ", ":", $capture_data); $fileData = explode(":", $capture_data); $fileData = $fileData[0]."_".$fileData[1]."_".$fileData[2]; if ($fileData == "--") return; // Verifica se existe o diretório para a data da imagem if(is_dir("$localPictures/$fileData")){ // Em caso positivo, copia/move a imagem para ele. print $fileName .": using directory ". $fileData ."\n"; if(copy($fileName, "$localPictures/$fileData/$fileName")) unlink($fileName); } else { // Senão, cria o diretório e copia/move a imagem para ele. print $fileName .": creating directory ". $localPictures . "/" . $fileData ."\n"; mkdir("$localPictures/$fileData"); if(copy($fileName, "$localPictures/$fileData/$fileName")) unlink($fileName); } } if($argc == 1) { // Mostra a ajuda. print "Usage: ". $argv[0] ." file01.jpg file02.jpg ...\n"; } else { // Faz o tratamento da string e executa a funcao for($i=1; $i<$argc; $i++) { $imagem = $argv[$i]; moveFile($imagem); } } ?>
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários