如何使用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 度。这是一个很好的单衬。

相关内容