Se você quiser escrever a data da criação do arquivo de imagem na própria imagem (se não for o que você deseja, por favor edit sua pergunta), você pode usar imagemagick
.
-
Instale o ImageMagick, se ainda não estiver instalado:
sudo apt-get install imagemagick
-
Execute um loop bash que obterá a data de criação de cada foto e use
convert
daimagemagick
suite para editar a imagem:for img in *jpg; do convert "$img" -gravity SouthEast -pointsize 22 \ -fill white -annotate +30+30 %[exif:DateTimeOriginal] "time_""$img"; done
Para cada imagem chamada
foo.jpg
, isso criará uma cópia chamadatime_foo.jpg
com o registro de data e hora no canto inferior direito. Você pode fazer isso com mais elegância, para vários tipos de arquivos e bons nomes de saída, mas a sintaxe é um pouco mais complexa:
OK, essa foi a versão simples. Eu escrevi um script que pode lidar com situações mais complexas, arquivos em sub-diretórios, nome de arquivo estranho, etc. Tanto quanto eu sei, apenas as imagens .png e .tif podem conter dados EXIF, então não há sentido em executar isso em outros formatos . No entanto, como uma possível solução alternativa, você pode usar a data de criação do arquivo em vez dos dados do EIF. É muito provável que isso não seja o mesmo que a data em que a imagem foi tirada, portanto, o script abaixo tem a seção relevante comentada. Remova os comentários se você quiser processar dessa maneira.
Salve este script como add_watermark.sh
e execute-o no diretório que contém seus arquivos:
bash /path/to/add_watermark.sh
Ele usa exiv2
, que você pode precisar instalar ( sudo apt-get install exiv2
). O script:
#!/usr/bin/env bash
## This command will find all image files, if you are using other
## extensions, you can add them: -o "*.foo"
find . -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.tif" -o \
-iname "*.tiff" -o -iname "*.png" |
## Go through the results, saving each as $img
while IFS= read -r img; do
## Find will return full paths, so an image in the current
## directory will be ./foo.jpg and the first dot screws up
## bash's pattern matching. Use basename and dirname to extract
## the needed information.
name=$(basename "$img")
path=$(dirname "$img")
ext="${name/#*./}";
## Check whether this file has exif data
if exiv2 "$img" 2>&1 | grep timestamp >/dev/null
## If it does, read it and add the water mark
then
echo "Processing $img...";
convert "$img" -gravity SouthEast -pointsize 22 -fill white \
-annotate +30+30 %[exif:DateTimeOriginal] \
"$path"/"${name/%.*/.time.$ext}";
## If the image has no exif data, use the creation date of the
## file. CAREFUL: this is the date on which this particular file
## was created and it will often not be the same as the date the
## photo was taken. This is probably not the desired behaviour so
## I have commented it out. To activate, just remove the # from
## the beginning of each line.
# else
# date=$(stat "$img" | grep Modify | cut -d ' ' -f 2,3 | cut -d ':' -f1,2)
# convert "$img" -gravity SouthEast -pointsize 22 -fill white \
# -annotate +30+30 "$date" \
# "$path"/"${name/%.*/.time.$ext}";
fi
done