从终端旋转图像


34

我的目录中包含很多图像,但是它们的方向错误。我想将图像旋转到正确的方向(大多数为±90 o)。使用图像(shotwell照片)查看器,我可以通过单击“旋转”按钮分别旋转它们,但这太繁琐了。

我看了看man shotwell,并shotwell --help-all但没有什么解释如何从命令行调用旋转命令。

有什么方法可以从终端调用Shotwell(或任何其他查看器)的旋转命令?或者也欢迎任何其他旋转图像的方法。


1
askubuntu.com/a/432662/15811如果您要从鹦鹉螺中获取它。但是您想要的终端命令是从“ imagemagick”“转换”的
Rinzwind

1
如果您希望无损旋转并且文件是jpeg,请查看jpegtran;imagemagick将进行(坦率地说)有损旋转
Rmano'3

Answers:


39

如果您正在寻找纯bash实现,那么ImageMagick的convert命令就是您要寻找的:

for szFile in /path/*.png
do 
    convert "$szFile" -rotate 90 /tmp/"$(basename "$szFile")" ; 
done

上面的内容将保留现有文件的完整性,并将新旋转的文件复制到其中,/tmp以便您可以将它们移动或复制到其他位置,甚至可以在转换后和验证后替换现有文件

(并且它将在所有最新版本的Ubuntu上作为其标准软件运行)


28
for file in *.JPG; do convert $file -rotate 90 rotated-$file; done

这将复制旋转并重命名您的文件。

如果您想保持原始文件不变,则此方法可能对您来说效果很好...

请注意,这是区分大小写的:如果文件名为* .jpg,则用小写字母(或* .png ...)替换。


4

如果要就地覆盖,mogrify则从ImageMagick套件中似乎是实现此目的的最简单方法:

# counterclockwise:
mogrify -rotate -90 *.jpg

# clockwise:
mogrify -rotate 90 *.jpg

注意:这不是JPEG文件的无损旋转方法,https : //www.imagemagick.org/discourse-server/viewtopic.php?t=5899jpegtran实现以下目标(未测试):

# counterclockwise
ls *.jpg | xargs -n 1 jpegtran -perfect -rotate 270

# clockwise
ls *.jpg | xargs -n 1 jpegtran -perfect -rotate 90

完美运行
Paul Jones

当涉及简单,快速,批处理图像编辑时
Mogrify绝对是瑞士刀

最佳答案,为什么不就地执行此操作?
mLstudent33

1
@ mLstudent33:好问题。mogrify对于JPEG文件而言,这似乎不是无损的,但事实并非如此jpegtran
krlmlr

3

这是我的方法:

  1. 安装gThumb

    sudo apt-get install gthumb
  2. 打开鹦鹉螺,然后转到图像目录。右键单击一个,然后选择Open with -> gthumb

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

    在此处输入图片说明

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

  5. 在工具栏上,选择Tools,然后选择,Rotate RightRotate Left根据您的喜好选择。

    在此处输入图片说明


0

一个不错的解决方案是制作一组备份(例如带前缀backup-),旋转原始文件,生成一组新文件(以前缀为rotated-),为您提供一组备份。

  • img-1.png
  • backup-img-1.png
  • rotated-img-1.png
  • img-2.png
  • ...等等

mv/ cp工具[bash的通配]只能添加前缀,它的混乱把他们带走(它会使用参数扩展,EWWW ...)

rename工具允许您使用s/before/after/替换语法(来自该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,但是可以使用原始副本的2个副本(缺点是您可以将前缀“ rotated-backup-...” 串联起来)
  • 顺时针旋转(-rotate 270使您逆时针旋转90°)
  • 要跟踪进度,请echo "Rotating ${imgf#backup-} ... ";convert调用后添加(在之前done
  • 更紧凑的形式(例如一组编号的文件的),使用一些参数扩展等echo "$(echo ${imgf#backup-img-} | cut -d\. -f 1)...";代替

    (您不能在同一bash参数扩展中删除前缀和后缀,因此请使用cut

然后,在验证完您没弄乱的图片后,将其移回原图以将其删除

rename 's/^rotated-//;' rotated-*
rm backup-img-*

0

您可以复制/粘贴此代码,并将其另存为 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.