从终端旋转图像
我有一个包含大量图像的目录,但它们的方向错误。 我想将图像旋转到正确的方向(大多数是±90 o )。 使用图像(shotwell photo)查看器我可以通过单击旋转按钮单独旋转它们,但这太繁琐了。
我看着man shotwell
和shotwell --help-all
但没有解释如何从命令行调用rotate命令。
有什么办法可以从终端调用shotwell(或任何其他观众)的旋转命令吗? 或者也欢迎任何其他旋转图像的方法。
如果您正在寻找纯粹的bash实现,ImageMagick的convert
命令就是您正在寻找的:
for szFile in /path/*.png do convert "$szFile" -rotate 90 /tmp/"$(basename "$szFile")" ; done
上面会保留现有文件,并将新文件复制到/tmp
这样您就可以移动/复制它们,甚至可以在转换后替换现有文件。
(它将适用于所有最新版本的Ubuntu,因为它是标准软件)
for file in *.JPG; do convert $file -rotate 90 rotated-$file; done
这将复制 – 旋转 – 并重命名您的文件。
如果你想暂时保留原始文件,这种方法可能适合你……
请注意,这是区分大小写的:如果您的文件名为* .jpg,则相应地使用小写(或* .png …)替换。
我是这样做的:
-
安装gThumb
sudo apt-get install gthumb
-
打开nautilus并转到图像目录。 右键单击一个并选择
Open with -> gthumb
。 -
在
view
菜单下选择Browser
或按Esc键。 这将打开显示所有图像的目录浏览器。 -
按Ctrl键并选择要旋转的图像,或通过Ctrl + A选择所有图像。
-
在工具栏上,根据您的偏好选择
Tools
,然后选择Rotate Right
或Rotate Left
。
如果你想要就地覆盖,那么来自ImageMagick套件的mogrify
似乎是实现这个目标的最简单方法:
# counterclockwise: mogrify -rotate -90 *.jpg # clockwise: mogrify -rotate 90 *.jpg
一个很好的解决方案是制作一组备份(例如前缀backup-
),旋转原始文件,生成一组新文件(前缀为例如rotated-
),为您提供一组
-
img-1.png
-
backup-img-1.png
-
rotated-img-1.png
-
img-2.png
- …等等
mv
/ cp
工具[bash globbing]只能添加前缀,将它们带走会很麻烦(它使用参数扩展,ewww ……)
rename
工具允许您使用s/before/after/
substitution语法(来自sed
工具)交换该安全保护前缀并覆盖原始文件,因此您对给定图片集的整个过程img-
{1..n} .png
将是:
for imgf in img-*.png; do mv "$imgf" "backup-$imgf"; done for imgf in backup-img-*.png; do convert "$imgf" -rotate 90 "rotated-$imgf"; done
注意:
- 你可以使用
cp
而不是mv
,但是原来有两份原件(下方是你得到前缀的连接,“rotated-backup-
…”) - 顺时针旋转(
-rotate 270
让你逆时针旋转90°) - 跟踪进度,添加
echo "Rotating ${imgf#backup-} ... ";
convert
电话后(done
之前) -
对于更紧凑的forms(例如一组编号文件),使用一些参数扩展,如
echo "$(echo ${imgf#backup-img-} | cut -d\. -f 1)...";
代替(你不能在相同的bash param扩展中删除前缀和后缀,因此使用
cut
)
然后在validation后你没有弄乱,删除图片,将它们移回原始图片
rename 's/^rotated-//;' rotated-* rm backup-img-*
您可以复制/粘贴此代码,并将其另存为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
从终端运行它。