同じ解像度の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
答え3
他の2つの答えは、EXIFの方向に応じて異なる結果を提供することができます。convert
EXIF方向に基づいて回転したように見えますが、jpegtran
EXIF方向を無視します。
この観察により、実際に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
-Orientation
EXIFタグテーブル)。
答え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"