コマンドラインで写真セットを回転させるには?

コマンドラインで写真セットを回転させるには?

同じ解像度のJPEG画像がたくさんあります。 imagemagic または gimp のグラフィカルインターフェイスでそれぞれを開くには時間がかかります。

各写真を回転させ、同じファイル名で保存する方法は?

答え1

convert次のコマンドを使用できます。

input.jpg 変換 - 回転<角度(度)>出力.jpg

時計回りに90度回転:

convert input.jpg -rotate 90 out.jpg

同じ名前でファイルを保存するには:

convert file.jpg -rotate 90 file.jpg

すべてのファイルを回転させるには:

for photo in *.jpg ; do convert $photo -rotate 90 $photo ; done

または、次のものを使用できます。mogrify推奨されるコマンドラインツール(最も良いツール)@ドン - クリスティ:

mogrify -rotate 90 *.jpg

答え2

JPEG画像と長方形回転の場合jpegtranまたはexiftran、画像を損失なく回転できるからです。

for f in *.jpg ; do 
    jpegtran -rotate 180 "$f" > "${f%.jpg}-rotated.jpg"
done

または所定の位置で回転:

for f in *.jpg ; do
    jpegtran -rotate 180 -outfile "$f" "$f"
done

exiftran-aEXIF方向タグの内容に基づいて画像を自動的に回転させるフラグもあります。

答え3

他の2つの答えは、EXIFの方向に応じて異なる結果を提供することができます。convertEXIF方向に基づいて回転したように見えますが、jpegtranEXIF方向を無視します。

この観察により、実際にEXIFの方向を破棄しなければならないという事実がわかりましたので、これexiftool以上のデータを失うことなくEXIFデータのみを廃棄したりしました(これもjpegtranオプションが指定されていない場合に行われる作業のようです)。-rotate

exiftool -all= -o outfile.jpg infile.jpg

EXIF方向を直接削除できます。

exiftool -Orientation= -o outfile.jpg infile.jpg

または修正してください

exiftool -n -Orientation=1 -o outfile.jpg infile.jpg

(後者の場合は、以下をお読みください。よくある質問-n値を変換するために必要なオプションを理解し、exiftool-OrientationEXIFタグテーブル)。

答え4

これは古い質問ですが、このタスクの解決策を見つけて発見しました。

問題はjpegtran画像を回転させますが、EXIFヘッダーデータをすべて破棄することです。

exiftool維持はされますが、使用するのはそれほど便利ではありません。

それで、EXIFヘッダーを維持しながらJPEG画像を90°回転させる小さなスクリプトを作成しました。たぶん誰かがこれが役に立つと思うかもしれません。

#!/bin/bash

orientation=$(exiftool -n -Orientation "$1")

if [[ "$?" != "0" ]]; then
    exit 1
fi

orientation=${orientation##*: }

if [[ "$orientation" == "1" ]]; then
    # 1 = Horizontal (normal)
    target="6"
elif [[ "$orientation" == "6" ]]; then
    # 6 = Rotate 90 CW
    target="3"
elif [[ "$orientation" == "3" ]]; then
    # 3 = Rotate 180
    target="8"
elif [[ "$orientation" == "8" ]]; then
    # 8 = Rotate 270 CW
    target="1"
else
    echo "Can't process orientation \"$orientation\""
    exit 1
fi

extension=${1/*./}
backup="${1%$extension*}orig.$extension"

mv "$1" "$backup" || exit 1

exiftool -n -Orientation=$target "$backup" -o "$1"

関連情報