imagemagick 转换:如何判断图像是否需要旋转?

Max*_*ams 2 bash image imagemagick rotation imagemagick-convert

在我的 rails 应用程序中,我让用户上传图像以用作他们制作的资源的缩略图。我使用 imagemagick 的 convert 命令进行所有图像处理:我转换为 jpg,将其转换为 800x600px,然后制作一些较小的缩略图版本。

这一切正常。问题是一些从我的 iPhone 上掉下来的图像,例如,有错误的方向。我的桌面似乎以不同的方式处理这个问题:当我在文件选择器对话框中看到图像的小缩略图时,它的方向错误,但是如果我在图像查看工具中打开它,它的方向是正确的。

大概有一些标题或元数据或图像文件中的某些内容告诉应用程序它需要旋转文件?我认为我需要在对图像进行任何其他处理之前阅读此内容,以便我可以在执行所有其他操作之前旋转图像(如有必要)。

谁能告诉我如何在 Ubuntu 服务器上的 bash 中做到这一点?

谢谢,马克斯

编辑:有点谷歌搜索表明这是与 EXIF 标头...

t6n*_*and 7

确实,您将不得不寻找读取 Image 的 Exif 元数据的方向值。使用 imagemagick 你可以得到这个值

identify -format '%[exif:orientation]' <Path to Image> 
//or by using
identify -format '%[orientation]' <Path to Image>
Run Code Online (Sandbox Code Playgroud)

Exif 方向值范围从 1 到 8,映射到方向如下:

  • 1 = 水平(正常)
  • 2 = 镜像水平
  • 3 = 旋转 180
  • 4 = 镜像垂直
  • 5 = 镜像水平并旋转 270 CW
  • 6 = 顺时针旋转 90
  • 7 = 镜像水平和旋转 90 CW
  • 8 = 顺时针旋转 270

因此,如果此元数据标签返回非 1 值,则图像将需要方向校正。如果此标签返回时没有任何值,则可以假定它具有正常方向。

要校正正常方向,您可以使用以下命令

convert -auto-orient <inputImagePath> <outputImagePath> 
Run Code Online (Sandbox Code Playgroud)