从终端旋转图像

我有一个包含大量图像的目录,但它们的方向错误。 我想将图像旋转到正确的方向(大多数是±90 o )。 使用图像(shotwell photo)查看器我可以通过单击旋转按钮单独旋转它们,但这太繁琐了。

我看着man shotwellshotwell --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 …)替换。

我是这样做的:

  1. 安装gThumb

     sudo apt-get install gthumb 
  2. 打开nautilus并转到图像目录。 右键单击一个并选择Open with -> gthumb

  3. view菜单下选择Browser或按Esc键。 这将打开显示所有图像的目录浏览器。

    在此处输入图像描述

  4. Ctrl键并选择要旋转的图像,或通过Ctrl + A选择所有图像。

  5. 在工具栏上,根据您的偏好选择Tools ,然后选择Rotate RightRotate 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从终端运行它。