如何根据exif数据自动旋转图像

Pet*_*mit 37 exif rotate images ubuntu

当我用相机 (Olympus E-520) 拍照时,EXIF 数据中存储了方向。

Ubuntu 上的标准图像查看器可以正确显示这些图像。Windows 查看器但不是。

有没有办法在 Ubuntu 上批量旋转这些图像(如果需要,根据 EXIF)?例如使用 ImageMagick 工具?

小智 43

exiftranJHead ( jhead -autorot)可以做到这一点。exiftran可以无损地做到这一点,不确定jhead

  • jhead -autorot 调用 jpegtran,它可以进行完美的无损旋转。我已经忘记了 IJG 的所有无损内容。http://jpegclub.org/losslessapps.html Exiftran 也可以做无损旋转,而且比 jpegtran 更好,因为它尊重图像文件中的 exif 信息。但是您应该注意,有时(我不确定所有细节)您无法无损旋转。因此,如果您使用 jhead 实现脚本来识别必要的旋转(类似于我之前的,但使用 case 语句来处理所有旋转),您应该支持回退到有损旋转。 (3认同)
  • 我发现 exiftran 可以从文件中删除一些元数据。例如,三星 Galaxy S2 拍摄的图像具有时间戳字段(可能非 EXIF),exiftran 会将其删除。exiftran -a 也会改变不需要旋转的图像。jhead -autorot 不存在这两个问题。OTOH,它缺少保留文件 mtime 的选项(但有 -ft 开关作为解决方法)。 (2认同)

ope*_*llo 14

ImageMagick 的转换工具有一个-auto-orient标志,可以完成工作。

#!/bin/bash

JHEAD=jhead
SED=sed
CONVERT=convert

for f in *.jpg
do
        orientation=$($JHEAD -v $f | $SED -nr 's:.*Orientation = ([0-9]+).*:\1:p')

        if [ -z $orientation ]
        then
                orientation=0
        fi

        if [ $orientation -gt 1 ]
        then
                echo Rotating $f...
                mv $f $f.bak
                $CONVERT -auto-orient $f.bak $f
        fi
done
Run Code Online (Sandbox Code Playgroud)

我拼凑了一个快速脚本来迭代当前目录中的 *.jpg。您可以轻松修改它以采用路径($ 1)或您需要的任何内容。