如何使用imagemagick旋转目录中的所有图像?


Answers:


20

您的代码有很多问题。首先,您正在解析ls,这是一个坏主意$file正如您所指出的那样,您还需要引用该变量,并且还应该对其进行引用,以免空格中断。您在声明,num但从未使用过。一种更安全的方法是:

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

如果文件包含换行符,这仍然会出现问题,但如果路径包含空格,至少不会中断。

如果文件都在同一目录中,则可以使用globbing进一步简化文件。您也可以使用参数扩展来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 会更合适的恕我直言。干杯!
Valentin Bajrami

1
@ val0x00ff绝对(我赞成您的回答,这表明了这一点)。我只是重复了OP正在修复更明显的错误的确切内容。
terdon

凉!我刚刚修改了您的命令。
Valentin Bajrami 2013年

11

mogrify -rotate 90 *.jpg 更好的One-Liner,可使用imagemagick旋转所有图像

mogrify -rotate 90 /tmp/p/DSC*.JPG 将INFACT旋转所有.JPG年初DSCp目录

Mogrify(imagemagick的一部分)的不同之处Convert在于它修改了原始文件 http://www.imagemagick.org/script/mogrify.php



6

不解析lsls这里不需要。此外,如果变量包含空格,则应加引号。

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

空间...或制表符,或换行或星号或问号或方括号...
斯特凡Chazelas

6

不是图像魔术解决方案,而是

sips -r 90 *.JPG

会将所有以.JPG结尾的图像旋转90度。这是一个很好的班轮。


1
首先,这将覆盖原始图像。
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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.