imagemagickでディレクトリ内のすべての画像を回転させる方法は?


回答:


20

コードにはかなりの数の問題があります。まず第一に、あなたは悪い考えである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

2
メソッドはを作成しますoriginal_filename.JPG_rotated.JPG"。追加"${file%.JPG}"_rotated.JPG する方がより適切です。乾杯!
バレンティンバジラミ

1
@ val0x00ffは絶対に(そして私はそれを示唆するあなたの答えを支持した)。OPが行っていた正確なことを繰り返して、より明白なエラーを修正しました。
テルドン

涼しい!コマンドを少し変更しました。
バレンティンバジラミ

11

mogrify -rotate 90 *.jpgimagemagickで すべての画像を回転させるための優れたOne-Liner

mogrify -rotate 90 /tmp/p/DSC*.JPGディレクトリ内で.JPG始まる すべてを事実上回転させますDSCp

Mogrify(imagemagickの一部)はConvert、元のファイルhttp://www.imagemagick.org/script/mogrify.phpを変更する 点が異なります



6

解析されませんlsし、lsここでは必要ありません。さらに、変数にスペースが含まれる場合は、変数を引用符で囲む必要があります。

for file in *.JPG; do
  convert -rotate 90 "$file" rotated_"$file"
done

スペース...やタブ、改行またはアスタリスクまたは疑問符または括弧...
ステファンChazelas

6

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

sips -r 90 *.JPG

.JPGで終わるすべての画像を90度回転します。良いライナーです。


1
fwiw、これは元の画像を上書きします。
-don_crissti

0

ファイルをとして参照する必要がありました$file。つまり、

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

0

このコードをコピーしてubuntuに貼り付け、「rotate.sh」として保存できます。

#!/bin/bash -e

CUR_DIR=`pwd`
cd "${1}"

for file in *.jpg; do
    convert "${file}" -rotate 90 "${file}";
done

cd CUR_DIR

このファイルを保存した後、以下を使用して端末から実行します ./rotate.sh folder_containing_images

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.