Acesso direto ao conteúdo
Logotipo Dicas-L, por Ricardo Burile

Busca

Visite também: Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Você está aqui: Home  → Arquivo Dicas-L

 

Assine a Lista Dicas-L

Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.

Organizando Fotografias com PHP Scripting

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.

Organização

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.

PHP

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".

Testando o PHP

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
  $

Organizando Fotografias

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).

Script

  #!/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);
     }
  }
  
  ?>

Veja a relação completa dos artigos de Otávio Corrêa Cordeiro

Formato PDF
Newsfeed RSS
Formato para impressão
PDF RSS Imprimir

Referências Adicionais

Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.

Avalie esta dica

  • Currently 3.02/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.0 /5 (1173 votos)

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script

Treinamentos, Consultorias e Soluçoes em TI. Baseados em softwares livres e padrões abertos para ambientes de missão crítica

Submarino.com.br

Asterisk na Prática 2ª Edição