GNU/Linux >> Belajar Linux >  >> Linux

Tambahkan stempel waktu ke gambar dari baris perintah Linux

Jika Anda ingin menulis tanggal pembuatan file gambar ke dalam gambar itu sendiri (jika bukan itu yang Anda inginkan, silakan edit pertanyaan Anda), Anda dapat menggunakan imagemagick .

  1. Instal ImageMagick jika belum diinstal:

    sudo apt-get install imagemagick
    
  2. Jalankan bash loop yang akan mendapatkan tanggal pembuatan setiap foto dan gunakan convert dari imagemagick suite untuk mengedit gambar:

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

    Untuk setiap gambar bernama foo.jpg , ini akan membuat salinan bernama time_foo.jpg dengan stempel waktu di kanan bawah. Anda dapat melakukannya dengan lebih elegan, untuk beberapa jenis file dan nama keluaran yang bagus tetapi sintaksnya sedikit lebih rumit:

Oke, itu versi sederhananya. Saya menulis skrip yang dapat menangani situasi yang lebih kompleks, file dalam sub direktori, nama file aneh, dll. Sejauh yang saya tahu, hanya gambar .png dan .tif yang dapat berisi data EXIF ​​jadi tidak ada gunanya menjalankan ini di format lain . Namun, sebagai solusi yang memungkinkan, Anda dapat menggunakan tanggal pembuatan file alih-alih data EIF. Ini kemungkinan besar tidak sama dengan tanggal pengambilan gambar, jadi skrip di bawah ini memiliki bagian yang relevan yang dikomentari. Hapus komentar jika Anda ingin memprosesnya dengan cara ini.

Simpan skrip ini sebagai add_watermark.sh dan jalankan di direktori yang berisi file Anda:

bash /path/to/add_watermark.sh

Ini menggunakan exiv2 yang mungkin perlu Anda pasang (sudo apt-get install exiv2 ). Skrip:

#!/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. Cari Torrents Dari Command Line Di Linux

  2. Migrasi server Linux dari baris perintah

  3. Dasar-dasar baris Perintah Linux – Menjalankan perintah dari baris perintah

  1. 4 Cara Mengirim Lampiran Email dari Baris Perintah Linux

  2. Mengunggah file ke akun S3 dari baris perintah Linux

  3. Clonezilla dari Baris Perintah

  1. Konfigurasikan ruang kerja Linux dari jarak jauh dari baris perintah

  2. Pelaporan I/O dari baris perintah Linux

  3. matlab mengeksekusi skrip dari baris perintah linux