GNU/Linux >> Linux の 問題 >  >> Linux

Linux コマンド ラインからイメージにタイムスタンプを追加する

画像ファイルの作成日を画像自体に書き込みたい場合 (それが必要ない場合は、質問を編集してください)、 imagemagick を使用できます .

<オール>
  • まだインストールされていない場合は、ImageMagick をインストールします。

    sudo apt-get install imagemagick
    
  • 各写真の作成日を取得して convert を使用する bash ループを実行します imagemagick から 画像編集スイート:

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

    foo.jpg という名前の各画像 、これにより time_foo.jpg というコピーが作成されます 右下にタイムスタンプ。複数のファイル タイプと適切な出力名に対して、これをよりエレガントに行うことができますが、構文はもう少し複雑です:

  • OK、それは単純なバージョンでした。より複雑な状況、サブディレクトリ内のファイル、奇妙なファイル名などに対処できるスクリプトを作成しました。私の知る限り、.png および .tif 画像のみが EXIF データを含むことができるため、他の形式でこれを実行しても意味がありません。 .ただし、考えられる回避策として、EIF データの代わりにファイルの作成日を使用できます。これは、画像が撮影された日付と同じではない可能性が非常に高いため、以下のスクリプトでは関連するセクションがコメントアウトされています.このように処理したい場合は、コメントを削除してください。

    このスクリプトを add_watermark.sh として保存します ファイルを含むディレクトリで実行します:

    bash /path/to/add_watermark.sh
    

    exiv2 を使用しています インストールが必要な場合があります (sudo apt-get install exiv2 )。スクリプト:

    #!/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. コマンドラインからのLinuxサーバーの移行

    2. Linux コマンド ラインの基本 – コマンド ラインからのコマンドの実行

    3. コマンドLinuxラインからのmatlab実行スクリプト

    1. コマンドラインからリモートでLinuxワークスペースを構成する

    2. Linuxコマンドラインから電子メールの添付ファイルを送信する4つの方法

    3. コマンドラインからの Clonezilla

    1. Linuxのコマンドラインからトレントを検索

    2. LinuxコマンドラインからのI/Oレポート

    3. Linux コマンドラインから S3 アカウントにファイルをアップロードする