imagemagickを使ってディレクトリ内のすべての画像を回転させるには?

imagemagickを使ってディレクトリ内のすべての画像を回転させるには?

パターンに一致するディレクトリ内のすべての画像を回転させたい。

これまで私は以下を持っています:

for file in `ls /tmp/p/DSC*.JPG`; do
  convert $file -rotate 90 file+'_rotated'.JPG
done

しかし、これは出力を提供しませんか?

答え1

mogrify -rotate 90 *.jpg すべての画像を回転させるためのより良いOne-Linerイメージマジック

mogrify -rotate 90 /tmp/p/DSC*.JPG.JPG実際に次に始まるディレクトリ内のすべてのエントリを回転させます。DSCp

モグリフィ(imagemagickの一部)Convertは元のファイルを変更するのと同じではありませんhttp://www.imagemagick.org/script/mogrify.php

答え2

コードには多くの問題があります。まず、lsを解析しています。悪い考え。指摘したように、変数も引用しなければならず、$file空白のために壊れないように引用もしなければなりません。宣言しましたが、num使用しませんでした。より安全なアプローチは次のとおりです。

find /tmp/p/ -name "DSC*.JPG" | while IFS= read -r file; do
  convert "$file" -rotate 90 "$file"_rotated.JPG
done

ファイルに改行が含まれている場合はまだ問題が発生しますが、パスにスペースが含まれていると少なくとも問題は発生しません。

ファイルがすべて同じディレクトリにある場合は、ワイルドカードを使用してさらに簡素化できます。パラメータ拡張を使用してfoo_rotated.JPG1代わりに生成することもできますfoo.JPG_rotated.JPG

for file in /tmp/p/DSC*.JPG; do
  convert "$file" -rotate 90 "${file%.JPG}"_rotated.JPG
done

答え3

PE(パラメータ拡張)を使用する簡単な方法は次のとおりです。

for f in /tmp/p/DSC*.JPG
do
  convert -rotate 90 "$f" "${f%.JPG}"_converted.JPG
done

答え4

imagemagicソリューションではありませんが、

sips -r 90 *.JPG

.JPGで終わるすべての画像は90度回転します。これは素晴らしい1つのライナーです。

関連情報