从终端旋转图像

从终端旋转图像

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

我查看了man shotwellshotwell --help-all但没有任何内容解释如何从命令行调用旋转命令。

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

答案1

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

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

以上将保持现有文件完好无损,并复制新旋转的文件,/tmp以便您可以将它们移动或复制到其他地方,或者甚至取代现有的转换后并经过验证

(并且它将在 Ubuntu 所有最新版本上运行,因为它是标准软件)

答案2

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

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

如果您暂时不想改变原始文件,这种方法可能适合您...

请注意,这是区分大小写的:如果您的文件名为 *.jpg,请相应地替换为小写(或 *.png ...)。

答案3

如果您想就地覆盖,mogrify从 ImageMagick 套件中实现这一点似乎是最简单的方法:

# counterclockwise:
mogrify -rotate -90 *.jpg

# clockwise:
mogrify -rotate 90 *.jpg

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

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

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

答案4

exiftran 怎么样 - 转换数码相机 jpeg 图像

我知道它有点限制(jpeg)但它具有自动功能(使用 exif 方向标签)。

for photo in *.jpg
  do exiftrans -ia $photo
done

关于 Exiftran,它是一个用于转换数码相机 jpeg 图像的命令行实用程序。它可以像 jpegtran(1) 一样进行无损旋转,但与 jpegtran(1) 不同的是,它关心 EXIF 数据:它可以通过检查 exif 方向标签自动旋转图像;如果需要,它会更新 exif 信息(图像尺寸、方向);它还会旋转 exif 缩略图。它可以一次处理多张图像

相关内容