GNU/Linux >> Znalost Linux >  >> Linux

Přidejte časové razítko do obrázku z příkazového řádku Linuxu

Pokud chcete zapsat datum vytvoření souboru obrázku do samotného obrázku (pokud to není to, co chcete, upravte prosím svůj dotaz), můžete použít imagemagick .

  1. Nainstalujte ImageMagick, pokud ještě není nainstalován:

    sudo apt-get install imagemagick
    
  2. Spusťte bashovou smyčku, která zjistí datum vytvoření každé fotografie a použijte convert z imagemagick sada pro úpravu obrázku:

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

    Pro každý obrázek s názvem foo.jpg , vytvoří se kopie s názvem time_foo.jpg s časovým razítkem vpravo dole. Můžete to udělat elegantněji, pro více typů souborů a pěkná výstupní jména, ale syntaxe je trochu složitější:

Dobře, to byla jednoduchá verze. Napsal jsem skript, který si poradí se složitějšími situacemi, soubory v podadresářích, divným názvem souboru atd. Pokud vím, EXIF ​​data mohou obsahovat pouze obrázky .png a .tif, takže nemá smysl to spouštět v jiných formátech . Jako možné řešení však můžete místo dat EIF použít datum vytvoření souboru. Velmi pravděpodobně to není stejné jako datum, kdy byl obrázek pořízen, takže skript níže má příslušnou sekci komentovanou. Pokud chcete, aby byly zpracovány tímto způsobem, odstraňte komentáře.

Uložte tento skript jako add_watermark.sh a spusťte jej v adresáři, který obsahuje vaše soubory:

bash /path/to/add_watermark.sh

Používá exiv2 který možná budete muset nainstalovat (sudo apt-get install exiv2 ). Skript:

#!/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. Nakonfigurujte pracovní prostor Linuxu vzdáleně z příkazového řádku

  2. 4 způsoby, jak odeslat e-mailovou přílohu z příkazového řádku systému Linux

  3. Prohledávejte torrenty z příkazového řádku v Linuxu

  1. Hlášení I/O z příkazového řádku Linuxu

  2. matlab spustí skript z příkazové řádky linuxu

  3. Testovat přihlašovací údaje MySQL z příkazového řádku Linuxu?

  1. Migrace linuxového serveru z příkazového řádku

  2. Linux Základy příkazového řádku – Spouštění příkazů z příkazového řádku

  3. Nahrávání souborů na účet S3 z příkazového řádku Linuxu