Aê China, como te disse no e-mail anterior, estou estudando a fundo a suite ImageMagick para escrever um arrtigo ou, quem sabe, um livro.
Eis que me deparei com seguinte faceta do utilitário identify, que faz parte da suíte, e que é pouquíssimo conhecido. Veja seu comportamento básico: $ identify ArraialDoCabo4.jpg ArraialDoCabo4.jpg JPEG 300x225 300x225+0+0 DirectClass 8-bit 16.9883kb Mas se eu pedir algo mais verbose, veja: $ identify -format "%[EXIF:*]" ArraialDoCabo4.jpg exif:ApertureValue=128/32 exif:ColorSpace=65535 exif:ComponentsConfiguration=... exif:CompressedBitsPerPixel=5/1 exif:Compression=6 exif:CustomRendered=0 exif:DateTime=2004:12:07 14:15:50 exif:DateTimeDigitized=2004:10:28 10:22:49 exif:DateTimeOriginal=2004:10:28 10:22:49 exif:DigitalZoomRatio=2592/2592 exif:ExifImageLength=225 exif:ExifImageWidth=300 exif:ExifOffset=204 exif:ExifVersion=0220 exif:ExposureBiasValue=0/3 exif:ExposureMode=0 exif:ExposureTime=1/1250 exif:FileSource=. exif:Flash=24 exif:FlashPixVersion=0100 exif:FNumber=40/10 exif:FocalLength=230/32 exif:FocalPlaneResolutionUnit=2 exif:FocalPlaneXResolution=2592000/283 exif:FocalPlaneYResolution=1944000/212 exif:JPEGInterchangeFormat=1046 exif:JPEGInterchangeFormatLength=2106 exif:Make=Canon exif:MaxApertureValue=64/32 exif:MeteringMode=5 exif:Model=Canon PowerShot G5 exif:Orientation=1 exif:ResolutionUnit=2 exif:SceneCaptureType=0 exif:SensingMethod=2 exif:ShutterSpeedValue=329/32 exif:Software=Adobe Photoshop 7.0 exif:WhiteBalance=0 exif:XResolution=72/1 exif:YResolution=72/1 Puxa, aí tem até a câmera que eu tinha à época (Opção Make) e o modelo (opção Model), mas o que interessa é a opção DateTime. Então vamos fazer assim: $ identify -format "%[EXIF:*]" ArraialDoCabo4.jpg | grep :DateTime= exif:DateTime=2004:12:07 14:15:50 Assim sendo, podemos fazer algo assim: $ identify -format "%[EXIF:*]" ArraialDoCabo4.jpg | sed -r '/:DateTime=/!d;s#.*=([0-9]{4}):([0-9]{2}):([0-9]{2}).*#\3/\2/\1#' 07/12/2004 Então seu script seria algo assim: Erro=0 for Foto in *.jpg do Data=$(identify -format "%[EXIF:*]" "$Foto" | sed -r '/:DateTime=/!d;s#.*=([0-9]{4}):([0-9]{2}):([0-9]{2}).*#\3/\2/\1#') [ "$Data" ] || { echo Foto $Foto sem exif Erro=1 } montage -frame 5 -geometry +0+0 -label $Data \ -font Impact-Normal -pointsize 25 -fill Blue \ -stroke orange -background none -mattecolor DodgerBlue \ "$Foto" "$Foto"OK.png done -- Abração, Julio *Cursos de Shell e Zenity nos finais de semana: - Em SP ligue (11) 2125-4747; - Em DF ligue (61) 3223-3000; - No RJ brevemente; - Turmas fechadas em outras cidades ligue (21) 8112-9988 * 2009/1/30 china <china.lis...@gmail.com> > 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 <china.lis...@gmail.com <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 > > > > > > [As partes desta mensagem que não continham texto foram removidas]