GNU/Linux >> Tutoriales Linux >  >> Linux

Agregar marca de tiempo a la imagen desde la línea de comandos de Linux

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 .

  1. Instale ImageMagick si aún no está instalado:

    sudo apt-get install imagemagick
    
  2. Ejecute un ciclo bash que obtenga la fecha de creación de cada foto y use convert del imagemagick 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 llamada time_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

Linux
  1. Configurar un espacio de trabajo de Linux de forma remota desde la línea de comandos

  2. Buscar torrents desde la línea de comandos en Linux

  3. Conceptos básicos de la línea de comandos de Linux:ejecución de comandos desde la línea de comandos

  4. Subir archivos a la cuenta S3 desde la línea de comandos de Linux

  5. ¿Probar las credenciales de MySQL desde la línea de comandos de Linux?

Cómo reiniciar (reiniciar) Linux desde la línea de comandos

Cómo verificar los detalles del clima desde la línea de comandos en Linux

Cómo ajustar el brillo del monitor desde la línea de comandos en Linux

Copie un archivo a varios directorios desde la línea de comandos en Linux

Cómo comprobar las estadísticas de red de Linux desde la línea de comandos

Enviar correo electrónico en Linux desde la línea de comandos