语境

语境

语境

iPhone 照片两者:肖像和风景都带有 EXIF 数据时间戳,通过 ImageMagick 7.0.10-62 Q16 x86_64 2021-02-07 + Catalina MacOs。 ImageMagick 通过以下方式安装:brew install ImageMagick

景观图像遵循重力图:

-gravity选项指定用于注释图像的参考框架。带注释的景观- 迎新照片遵循惯例。

在此输入图像描述在此输入图像描述

问题:肖像图像注释被旋转

带注释的肖像-方向照片导致参考系旋转:

在此输入图像描述在此输入图像描述

相关代码:

rm time*.jpeg
tic=$(date)
for img in IMG*jpeg; do convert "$img" -gravity Center -resize 35% -pointsize 65 \
   -fill red  -annotate +30+30  %[exif:DateTimeOriginal] "time_""$img";
   echo "watermarked $img successfully" 
done
toc=$(date)
echo $tic 
echo $toc

问题

虽然如果检测到肖像图像,可以应用算法来旋转文本,但我认为有一个更简单的方法,或者上面的代码在某种程度上不正确,导致参考系旋转了+90。风景照片不会遇到这个问题。

  1. 为什么纵向图像的重力参考系旋转 90 度,而不是横向图像? (特点还是缺陷?)
  2. 如何采用一致/单一的gravity参考框架?
    • 最好是非旋转参考系

答案1

肖像图像通过 ExifOrientation标签进行旋转。因此,如果我们旋转图像,添加的时间戳是正确的。

肖像图像(通过 Exif 旋转):

$ identify -verbose IMG_6361.jpeg | grep Orientation
  Orientation: RightTop
    exif:Orientation: 6
$ exiftool IMG_6361.jpeg | grep 'Orient\|Width\|Height'
Orientation                     : Rotate 90 CW
Exif Image Width                : 4032
Exif Image Height               : 3024
Image Width                     : 4032
Image Height                    : 3024

横向图像(未旋转):

$ identify -verbose IMG_1690.jpeg | grep Orientation
  Orientation: TopLeft
    exif:Orientation: 1
$ exiftool IMG_1690.jpeg | grep 'Orient\|Width\|Height'
Orientation                     : Horizontal (normal)
Exif Image Width                : 4032
Exif Image Height               : 3024
Image Width                     : 4032
Image Height                    : 3024

要将方向更改为“左上角”,您可以使用 ImageMagick 的-自动定向选项,例如

$ convert -auto-orient IMG_6361.jpeg IMG_6361_auto_orient.jpeg
$ exiftool IMG_6361_auto_orient.jpeg | grep 'Orient\|Width\|Height'
Orientation                     : Horizontal (normal)
Exif Image Width                : 4032
Exif Image Height               : 3024
Image Width                     : 3024
Image Height                    : 4032

在您的命令中包含-auto-orient以下内容:

for img in IMG*jpeg; do convert "$img" -auto-orient -gravity Center -resize 35% -pointsize 65 \
   -fill red  -annotate +30+30  %[exif:DateTimeOriginal] "time_""$img";
   echo "watermarked $img successfully" 
done

结果:

在此输入图像描述

相关内容