GNU/Linux >> Linux Esercitazione >  >> Linux

Aggiungi timestamp all'immagine dalla riga di comando di Linux

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 .

  1. Installa ImageMagick se non è già installato:

    sudo apt-get install imagemagick
    
  2. Esegui un ciclo bash che otterrà la data di creazione di ogni foto e usa convert dal imagemagick 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 chiamata time_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

Linux
  1. Configura un'area di lavoro Linux in remoto dalla riga di comando

  2. 4 modi per inviare allegati e-mail dalla riga di comando di Linux

  3. Cerca torrent dalla riga di comando in Linux

  4. Report di I/O dalla riga di comando di Linux

  5. Caricamento di file sull'account S3 dalla riga di comando di Linux

Come riavviare (riavviare) Linux dalla riga di comando

Come controllare i dettagli meteorologici dalla riga di comando in Linux

Come regolare la luminosità del monitor dalla riga di comando in Linux

Copia un file in più directory dalla riga di comando su Linux

Come controllare le statistiche di rete Linux dalla riga di comando

Invia e-mail in Linux dalla riga di comando