GNU/Linux >> Tutoriels Linux >  >> Linux

Ajouter un horodatage à l'image à partir de la ligne de commande Linux

Si vous souhaitez écrire la date de création du fichier image dans l'image elle-même (si ce n'est pas ce que vous voulez, veuillez modifier votre question), vous pouvez utiliser imagemagick .

  1. Installez ImageMagick s'il n'est pas déjà installé :

    sudo apt-get install imagemagick
    
  2. Exécutez une boucle bash qui obtiendra la date de création de chaque photo et utilisera convert du imagemagick suite pour éditer l'image :

    for img in *jpg; do convert "$img" -gravity SouthEast -pointsize 22 \
       -fill white -annotate +30+30  %[exif:DateTimeOriginal] "time_""$img"; 
    done
    

    Pour chaque image nommée foo.jpg , cela créera une copie appelée time_foo.jpg avec l'horodatage en bas à droite. Vous pouvez le faire de manière plus élégante, pour plusieurs types de fichiers et de beaux noms de sortie, mais la syntaxe est un peu plus complexe :

OK, c'était la version simplifiée. J'ai écrit un script qui peut gérer des situations plus complexes, des fichiers dans des sous-répertoires, des noms de fichiers bizarres, etc. Pour autant que je sache, seules les images .png et .tif peuvent contenir des données EXIF, il est donc inutile de l'exécuter sur d'autres formats . Cependant, comme solution de contournement possible, vous pouvez utiliser la date de création du fichier au lieu des données EIF. Ce n'est très probablement pas la même que la date à laquelle l'image a été prise, donc le script ci-dessous a la section pertinente commentée. Supprimez les commentaires si vous souhaitez qu'il soit traité de cette manière.

Enregistrez ce script sous add_watermark.sh et lancez-le dans le répertoire qui contient vos fichiers :

bash /path/to/add_watermark.sh

Il utilise exiv2 que vous devrez peut-être installer (sudo apt-get install exiv2 ). Le scénario :

#!/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. Configurer un espace de travail Linux à distance depuis la ligne de commande

  2. Rechercher des torrents à partir de la ligne de commande sous Linux

  3. Rapports d'E/S à partir de la ligne de commande Linux

  4. Migrer un serveur Linux depuis la ligne de commande

  5. Principes de base de la ligne de commande Linux - Exécution de commandes à partir de la ligne de commande

Comment redémarrer (redémarrer) Linux à partir de la ligne de commande

Comment vérifier les détails météorologiques à partir de la ligne de commande sous Linux

Comment régler la luminosité du moniteur à partir de la ligne de commande sous Linux

Copier un fichier dans plusieurs répertoires à partir de la ligne de commande sous Linux

Comment vérifier les statistiques du réseau Linux à partir de la ligne de commande

Envoyer un e-mail sous Linux à partir de la ligne de commande