shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] script para datar fotos


From: Julio C. Neves
Subject: Re: [shell-script] script para datar fotos
Date: Fri, 30 Jan 2009 21:06:19 -0200

Me esqueci de colocar esses 2 scripts para manipular fotos:
Caso você seja como eu, e goste que se coloque uma moldura branca em volta
das fotos ampliadas para papel, vamos ver um *script* que faça isso
automaticamente, de forma que você não tenha que pagar um pouco mais por
esse serviço extra na ampliação.

  *$ cat emoldura.sh*
#!/bin/bash
# Esse script coloca molduras em fotografias
# Versão para zenity
#
Larg=5 # quanto maior for este número, mais larga será a moldura
Arqs=$(zenity --file-selection --multiple --separator '^') || exit 1

#  Agora tenho uma lista de arquivos separados por circunflexo (^)
#+ Vamos trocar por ~+= os espaços em branco dos nomes dos arquivos
#+ e depois substituir os circunflexos por espaços em branco para
#+ criar uma lista para o mogrify rodar todos de uma vez.

Arqs=$(sed 's/ /~+=/g;s/\^/ /g' <<< "$Arqs")
for CadaUm in $Arqs
do
    CadaUm=$(sed 's/~+=/ /g' <<< $CadaUm) # Repondo os espaços em branco
#+                                          do nome de cada arquivo
    convert "$CadaUm" -bordercolor white -border $Larg "$CadaUm"
done

  O *script* a seguir serve para girar aquelas fotos que você tirou com a
sua câmera na posição vertical, pois estava fotografando uma girafa. ;)

   *$ cat RodaFoto.sh *
#!/bin/bash
# Esse script gira um arquivos de imagem.
# Versão para zenity
#
# Lendo os arquivos que serão girados
Arq=$(zenity --file-selection --multiple --separator '^') || exit 1
#  Agora tenho uma lista de arquivos separados por circunflexo (^)
#+ Vamos "escapar" os espaços em branco dos nomes dos arquivos
#+ e substituir os circunflexos por espaços em branco para
#+ criar uma lista para o mogrify rodar todos de uma vez.
Arq=$(sed 's/ /\\ /g;s/\^/ /g' <<< "$Arq")
# Montando uma radio list para capturar o ângulo de rotação
Ang=$(zenity --list --radiolist --height 240 --title "Ângulo de rotação" \
    --text "Escolha o ângulo que sua\n imagem será girada" \
    --column Marque --column ângulo true 90 false 180 \
    false 270 false "Outro valor") || exit 1
[ "$Ang" = "Outro valor" ] && {
    Ang=$(zenity --entry --title "Ângulo especial" \
        --text "Informe o ângulo entre 1° e 359°") || exit 1
    (($Ang < 1 || $Ang > 359)) && {
        zenity --error --title "Erro" \
            --text "O ângulo deveria ser entre 1° e 359°"
        exit 1
        }
    }
mogrify -rotate $Ang "$Arq"







2009/1/30 Julio C. Neves <address@hidden>

> Fala China,
> se vc já voltou de férias já posso te dar trabalho ;) Cara, foto no
> banheiro? Quero ver essas... ;)
>
> Amigão estou escrevendo um super artigo (é provával que vire livro sobre o
> ImageMagick. O sw é muito completo e complexo. Já escrevi umas 40 páginas e
> não estou nem no meio do convert. Me cobra pelo e-mail corporativo que e
> passo o que escrevi até pere vc me ajudar a depurar. Legal?
>
> Por enquanto vamos resolver o seu problema. Muito melhor que o convert para
> isso é o montage, pois ele faz uma borda em 3D com a imagem e rotula a boda,
> sem poluir a imagem. Teste a linha abaixo e caso não goste, me fale que te
> explico o convert. Mas de cara já te digo: evite o draw e prefira o -label
> com -gravity.
>
>  $ montage -frame 5 -geometry +0+0 -label "Foto no banheiro em $Data"
> -font Impact-Normal -pointsize 25 -fill Blue -stroke orange -background none
> -mattecolor DodgerBlue FotoNoBanheiro.jpg montage.png
>
> Para testar cores de letras, de molduras, profundidade da moldura, ... É
> mais fácil usar o cmd display da suíte ImageMagick ao invés de ficar
> gravando imagens e depois apagando-as. E aí essa linha ficaria assim:
>
> $ montage -frame 5 -geometry +0+0 -label "Foto no banheiro em $Data" -font
> Impact-Normal -pointsize 25 -fill Blue -stroke orange -background none
> -mattecolor DodgerBlue FotoNoBanheiro.jpg miff:- | display -
>
> Forte abraço para vc e para a turma de BH.
>
> Julio
>
> PS: Já marcou as próximas férias? ;)
>
>
>
>
> 2009/1/30 china <address@hidden>
>
>>   Caros;
>>
>> Retomando a tarefa depois das férias, e agora mais motivado ainda
>> pelas zilhares de fotos tiradas :-)
>>
>> Matutando sobre a questão, vi que não estava pegando a data da foto,
>> mas sim do arquivo, que refletia o timestam de gravação no filesystem.
>> Ainda bem que o comando 'cp' preservou as datas de criação no cartão
>> de memória, mas não dá para confiar nisso ...
>>
>> Então descobri o programa 'exiftime', que lê o metadado da foto e
>> revela a data em que ela foi tirada, assim fica mais fidedigno :-D
>>
>> usando o comando 'exiftime -td pessoal/Fotos/*.jpg' ele retorna o
>> seguinte:
>> [...]
>> pessoal/Fotos/banheiro_012.jpg:
>> Image Digitized: 2008:08:10 21:33:55
>>
>> pessoal/Fotos/banheiro_013.jpg:
>> Image Digitized: 2008:08:10 21:34:04
>>
>> pessoal/Fotos/galo.jpg:
>> Image Digitized: 2007:09:07 10:44:17
>> [...]
>>
>> Ou seja, lista todas as fotos e mostra a data e hora de criação.
>>
>> O que tentei fazer:
>>
>> for img in $(exiftime -td *.jpg); do
>> convert -font helvetica -fill white -stroke black -pointsize 12
>> -draw 'text 2200,1900 "$img"' ${img}datada.jpg
>> done
>>
>> Então retorna o erro como no exemplo:
>>
>> 'convert: missing an image filename `10:44:17datada.jpg'.'
>>
>> e não processa nada, apenas criando os arquivos em vazios. Creio que o
>> problema está na passagem do nome do arquivo para o convert.
>>
>> O que acham? Alguém tem uma luz para destara esse nó?
>>
>> PS: Numa de minhas buscas encontrei diversos softwares que fazem
>> gravação de data nas fotos, mas todos proprietários e feitos apenas
>> para windowz. O f-spot que vem no Ubuntu lê estes metadados e organiza
>> as fotos em pastas justamente pela data de criação, mas não tem a
>> opção de gravar a data na foto.
>>
>> 2008/12/19 chinabhz <address@hidden <china.listas%40gmail.com>>:
>> > Caros;
>> > Tenho uma câmera digital que não tem a função de gravar a data nas
>> > fotos (sic)!
>> > Daí me surgiu a idéia de criar um script que pega a data do arquivo da
>> > foto e a escreve no arquivo. Não tenho conhecimento suficiente para
>> > concluir a tarefa, por isso peço ajuda de vocês.
>> >
>> > O que já consegui:
>> > 1) Usando o ls+awk consegui ler a pasta onde estão as fotos e retornar
>> > apenas a data e hora de cada um
>> > ls -lh * | awk {'print $6" "$7'}
>> >
>> > 2) usando o convert, do imagemagik, consegui gravar a data na foto em
>> > UMA foto:
>> >
>> > convert -font helvetica -fill white -stroke black -pointsize 12 -draw
>> > 'text 2200,1900 "datadafoto"' -stroke none -draw 'text 2200,1900
>> > "datadafoto"' foto.jpg fotodatada.jpg
>> >
>> > O que preciso: que o scritp leia o diretório de fotos e corte apenas a
>> > data e hora e passe como variavel para o convert fazer a datagem de
>> > todas de uma vez, sendo que na linha de comando onde está foto.jpg
>> > ficaria a variável que seria cada data de cada foto.
>> >
>> > Como minha câmera é muito comum, acredito que esse script seja de
>> > interesse geral ... Tem como fazer??
>> >
>> > O que já fiz e não deu certo foi:
>> >
>> > #!/bin/bash
>> > $fotos="ls -lh * | awk {'print $6" "$7'}"
>> > for img in $fotos; do
>> > convert -font helvetica -fill white -stroke black -pointsize 12 -draw
>> > 'text 2200,1900 "datadafoto"' -stroke none -draw 'text 2200,1900
>> > "datadafoto"' $img $imgdatada
>> >
>> >
>>  
>>
>
>
>
> --
> Abração,
> Julio
> Cursos de Shell e Zenity nos finais de semana:
> - Em SP ligue (11) 2125-4747;
> - Em DF ligue (61) 3223-3000;
> - Turmas fechadas em outras cidades ligue (21) 8112-9988
>



-- 
Abração,
Julio
Cursos de Shell e Zenity nos finais de semana:
- Em SP ligue (11) 2125-4747;
- Em DF ligue (61) 3223-3000;
- Turmas fechadas em outras cidades ligue (21) 8112-9988


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]