web-dev-qa-db-ja.com

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

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

これまでのところ:

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

しかし、それは何も出力しませんか?

18
Michael Durrant

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

mogrify -rotate 90 *.jpgimagemagickですべての画像を回転させるためのより良いワンライナー

mogrify -rotate 90 /tmp/p/DSC*.JPGは事実上すべてを回転します.JPGDSCディレクトリのpで始まる

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

11
Alex

PE(パラメーター拡張)を使用した簡単な方法は、

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

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

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

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

sips -r 90 *.JPG

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

6
desk_object

このコードをコピーして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を使用してターミナルから実行します

0
vin

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

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