Si desea escribir la fecha de creación del archivo de imagen en la imagen misma (si eso no es lo que desea, edite su pregunta), puede usar imagemagick
.
-
Instale ImageMagick si aún no está instalado:
sudo apt-get install imagemagick
-
Ejecute un ciclo bash que obtenga la fecha de creación de cada foto y use
convert
delimagemagick
suite para editar la imagen:for img in *jpg; do convert "$img" -gravity SouthEast -pointsize 22 \ -fill white -annotate +30+30 %[exif:DateTimeOriginal] "time_""$img"; done
Para cada imagen llamada
foo.jpg
, esto creará una copia llamadatime_foo.jpg
con la marca de tiempo en la parte inferior derecha. Puede hacer esto de manera más elegante, para múltiples tipos de archivos y buenos nombres de salida, pero la sintaxis es un poco más compleja:
OK, esa era la versión simple. Escribí un script que puede manejar situaciones más complejas, archivos en subdirectorios, nombres de archivo extraños, etc. Hasta donde yo sé, solo las imágenes .png y .tif pueden contener datos EXIF, por lo que no tiene sentido ejecutar esto en otros formatos. . Sin embargo, como posible solución alternativa, puede utilizar la fecha de creación del archivo en lugar de los datos EIF. Es muy probable que esta no sea la misma que la fecha en que se tomó la imagen, por lo que el guión a continuación tiene la sección relevante comentada. Elimina los comentarios si quieres que se procese de esta manera.
Guarde este script como add_watermark.sh
y ejecútelo en el directorio que contiene sus archivos:
bash /path/to/add_watermark.sh
Utiliza exiv2
que puede necesitar instalar (sudo apt-get install exiv2
). El guión:
#!/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