Se vuoi scrivere la data di creazione del file immagine nell'immagine stessa (se non è quello che vuoi, per favore modifica la tua domanda), puoi usare imagemagick
.
-
Installa ImageMagick se non è già installato:
sudo apt-get install imagemagick
-
Esegui un ciclo bash che otterrà la data di creazione di ogni foto e usa
convert
dalimagemagick
suite per modificare l'immagine:for img in *jpg; do convert "$img" -gravity SouthEast -pointsize 22 \ -fill white -annotate +30+30 %[exif:DateTimeOriginal] "time_""$img"; done
Per ogni immagine denominata
foo.jpg
, questo creerà una copia chiamatatime_foo.jpg
con il timestamp in basso a destra. Puoi farlo in modo più elegante, per più tipi di file e bei nomi di output, ma la sintassi è un po' più complessa:
OK, quella era la versione semplice. Ho scritto uno script in grado di gestire situazioni più complesse, file in sottodirectory, nomi di file strani ecc. Per quanto ne so, solo le immagini .png e .tif possono contenere dati EXIF, quindi non ha senso eseguirlo su altri formati . Tuttavia, come possibile soluzione alternativa è possibile utilizzare la data di creazione del file anziché i dati EIF. Molto probabilmente questa non è la stessa data in cui è stata scattata l'immagine, quindi lo script seguente ha la sezione pertinente commentata. Rimuovi i commenti se vuoi che vengano elaborati in questo modo.
Salva questo script come add_watermark.sh
ed eseguilo nella directory che contiene i tuoi file:
bash /path/to/add_watermark.sh
Usa exiv2
che potrebbe essere necessario installare (sudo apt-get install exiv2
). La sceneggiatura:
#!/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